Wie füge ich eine Spalte an einem bestimmten Spaltenindex in Pandas ein?


185

Kann ich eine Spalte an einem bestimmten Spaltenindex in Pandas einfügen?

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

Dies wird Spalte setzen nals die letzte Spalte df, ist aber nicht eine Möglichkeit zu sagen , dfsetzen nam Anfang?


Fügen Sie eine Spalte am Anfang (ganz links) eines DataFrame ein - mehr Lösungen + verallgemeinerte Lösung zum Einfügen einer beliebigen Sequenz (nicht nur eines konstanten Werts).
CS95

Antworten:


362

Siehe Dokumente: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html

mit loc = 0 wird am Anfang eingefügt

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
Für zukünftige Benutzer sind die neuen Parameter "loc", "column" und "value" . Quelle
Peter Maguire

11

Sie können versuchen, Spalten als Liste zu extrahieren, diese nach Belieben zu massieren und Ihren Datenrahmen neu zu indizieren:

>>> 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

BEARBEITEN: Dies kann in einer Zeile erfolgen; das sieht allerdings etwas hässlich aus. Vielleicht kommt ein sauberer Vorschlag ...

>>> 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

Wenn Sie einen einzelnen Wert für alle Zeilen wünschen:

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

Bearbeiten:

Du kannst auch:

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

0

Hier ist eine sehr einfache Antwort darauf (nur eine Zeile).

Sie können dies tun, nachdem Sie die Spalte 'n' wie folgt in Ihre df eingefügt haben.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.