come inserisco una colonna in corrispondenza di un indice di colonna specifico in Panda?


189

Posso inserire una colonna in un indice di colonna specifico in Panda?

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

Questo metterà la colonna ncome ultima colonna di df, ma non c'è un modo per dire dfdi mettere nall'inizio?


Inserisci una colonna all'inizio (estremità più a sinistra) di un DataFrame : più soluzioni + soluzione generalizzata per l'inserimento di qualsiasi sequenza (non solo un valore costante).
cs95,

Risposte:


370

vedi documenti: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html

usando loc = 0 si inserirà all'inizio

df.insert(loc, column, value)

df = pd.DataFrame({'B': [1, 2, 3], 'C': [4, 5, 6]})

df
Out: 
   B  C
0  1  4
1  2  5
2  3  6

idx = 0
new_col = [7, 8, 9]  # can be a list, a Series, an array or a scalar   
df.insert(loc=idx, column='A', value=new_col)

df
Out: 
   A  B  C
0  7  1  4
1  8  2  5
2  9  3  6

18
Per i futuri utenti, i nuovi parametri sono "loc", "colonna" e "valore" . Fonte
Peter Maguire,

11

Potresti provare a estrarre le colonne come elenco, a massaggiarlo come desideri e a reindicizzare il tuo frame di dati:

>>> cols = df.columns.tolist()
>>> cols = [cols[-1]]+cols[:-1] # or whatever change you need
>>> df.reindex(columns=cols)

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

EDIT: questo può essere fatto in una riga; tuttavia, questo sembra un po 'brutto. Forse potrebbe venire una proposta più pulita ...

>>> df.reindex(columns=['n']+df.columns[:-1].tolist())

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

9

Se vuoi un valore singolo per tutte le righe:

df.insert(0,'name_of_column','')
df['name_of_column'] = value

Modificare:

Puoi anche:

df.insert(0,'name_of_column',value)

0

Ecco una risposta molto semplice a questa (solo una riga).

Puoi farlo dopo aver aggiunto la colonna 'n' nel tuo df come segue.

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

df
    l   v   n
0   a   1   0
1   b   2   0
2   c   1   0
3   d   2   0

# here you can add the below code and it should work.
df = df[list('nlv')]
df

    n   l   v
0   0   a   1
1   0   b   2
2   0   c   1
3   0   d   2



However, if you have words in your columns names instead of letters. It should include two brackets around your column names. 

import pandas as pd
df = pd.DataFrame({'Upper':['a','b','c','d'], 'Lower':[1,2,1,2]})
df['Net'] = 0
df['Mid'] = 2
df['Zsore'] = 2

df

    Upper   Lower   Net Mid Zsore
0   a       1       0   2   2
1   b       2       0   2   2
2   c       1       0   2   2
3   d       2       0   2   2

# here you can add below line and it should work 
df = df[list(('Mid','Upper', 'Lower', 'Net','Zsore'))]
df

   Mid  Upper   Lower   Net Zsore
0   2   a       1       0   2
1   2   b       2       0   2
2   2   c       1       0   2
3   2   d       2       0   2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.