jak wstawić kolumnę w określonym indeksie kolumny w pandach?

189

Czy mogę wstawić kolumnę w określonym indeksie kolumny w pandach?

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

Będzie to umieścić kolumnę njako ostatniej kolumnie df, ale nie jest jakiś sposób, aby powiedzieć df, aby umieścić nna początku?

HappyPy
źródło
Wstaw kolumnę na początku (skrajnie lewy koniec) ramki DataFrame - więcej rozwiązań + uogólnione rozwiązanie do wstawiania dowolnej sekwencji (nie tylko stałej wartości).
cs95

Odpowiedzi:

370

zobacz dokumenty: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html

użycie loc = 0 wstawi na początku

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
Jeff
źródło
18
Dla przyszłych użytkowników nowe parametry to „loc”, „column” i „value” . Źródło
Peter Maguire
11

Możesz spróbować wyodrębnić kolumny jako listę, masować to, jak chcesz i ponownie zindeksować swoją ramkę danych:

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

EDYCJA: można to zrobić w jednym wierszu; wygląda to jednak trochę brzydko. Może może przyjść czystsza propozycja ...

>>> 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
Nic
źródło
9

Jeśli chcesz mieć jedną wartość dla wszystkich wierszy:

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

Edytować:

Możesz także:

df.insert(0,'name_of_column',value)
Hugo Vares
źródło
0

Oto bardzo prosta odpowiedź na to pytanie (tylko jedna linia).

Możesz to zrobić po dodaniu kolumny „n” do pliku df w następujący sposób.

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
rra
źródło