Podczas usuwania kolumny w dataframe używam:

del df['column_name']

I to działa świetnie. Dlaczego nie mogę użyć poniższych?

del df.column_name

, jak można uzyskać dostęp do kolumny / serii jako df.column_name, spodziewam się tego do pracy.

1547
John 16 listopad 2012, 10:26

10 odpowiedzi

Najlepsza odpowiedź

Jak się domyśliłeś, prawą składnię jest

del df['column_name']

Trudno jest zrobić del df.column_name pracować po prostu w wyniku ograniczeń składniowych w Pythonie. del df[name] zostaje przetłumaczony na df.__delitem__(name) pod kołdry Pythona.

1055
cs95 7 kwiecień 2019, 22:01

Najlepszym sposobem na to w Pandasie jest użycie {{ X0}}:

df = df.drop('column_name', 1)

Gdzie 1 jest numerem AXIS (0 dla wierszy i 1 dla kolumn.)

Aby usunąć kolumnę bez konieczności ponownego przypisania df Możesz zrobić:

df.drop('column_name', axis=1, inplace=True)

Wreszcie, aby upuść przez kolumnę numer zamiast etykiety kolumn , spróbuj, aby usunąć, np. 1st, 2 i 4 kolumny:

df = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 

Również pracuje z składnią "tekstem" dla kolumn:

df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)
2486
LondonRob 27 lipiec 2020, 15:42

Posługiwać się:

columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)

Spowoduje to usunięcie jednej lub więcej kolumn na miejscu. Zauważ, że inplace=True został dodany w Pandas V0.13 i nie będzie działać na starszych wersjach. Musisz przypisać wynik w tym przypadku:

df = df.drop(columns, axis=1)
264
Peter Mortensen 23 maj 2018, 19:44

Spadek według indeksu

Usuń pierwsze, drugie i czwarte kolumny:

df.drop(df.columns[[0,1,3]], axis=1, inplace=True)

Usuń pierwszą kolumnę:

df.drop(df.columns[[0]], axis=1, inplace=True)

Istnieje opcjonalny parametr inplace, aby oryginał Dane mogą być modyfikowane bez tworzenia kopii.

Wyskakować

Wybór kolumny, dodatek, usunięcie

Usuń kolumnę column-name:

df.pop('column-name')

Przykłady:

df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])

print df:

   one  two  three
A    1    2      3
B    4    5      6
C    7    8      9

df.drop(df.columns[[0]], axis=1, inplace=True) print df:

   two  three
A    2      3
B    5      6
C    8      9

three = df.pop('three') print df:

   two
A    2
B    5
C    8
127
Peter Mortensen 23 maj 2018, 19:44

Miły dodatek jest możliwość kolumny upuść tylko wtedy, gdy istnieją . W ten sposób możesz objąć więcej przypadków użytkowania, a także spadnie tylko istniejące kolumny z etykiet do niej:

Po prostu dodaj błędy = "ignoruj" , na przykład.:

df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
  • Jest to nowe z pandas 0,16.1 dalej. Dokumentacja jest Oto.
64
Peter Mortensen 23 maj 2018, 19:48

Z wersji 0.16.1 możesz zrobić

df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')
44
Emile Bergeron 21 październik 2016, 21:20

Pandas 0.21+ Odpowiedź.

PANDAS Wersja 0.21 zmieniła drop Metoda nieznacznie zawierać zarówno parametry index, jak i columns, aby pasowały do podpisu metod {{x 4}}}.

df.drop(columns=['column_a', 'column_c'])

Osobiście wolę używać parametru axis, aby oznaczyć kolumny lub indeks, ponieważ jest to dominujący parametr słów kluczowych stosowanych w prawie wszystkich metodach pandy. Ale teraz masz jakieś dodatkowe wybory w wersji 0.21.

28
Acumenus 20 wrzesień 2018, 18:48

W pandasie 0.16.1+ możesz upuścić kolumny tylko wtedy, gdy istnieją one rozwiązanie opublikowane przez @iteanlavi. Przed tą wersją możesz osiągnąć ten sam wynik za pośrednictwem warunkowej listy Rozumienie:

df.drop([col for col in ['col_name_1','col_name_2',...,'col_name_N'] if col in df], 
        axis=1, inplace=True)
22
Alexander 22 listopad 2016, 15:15

Inny sposób usunięcia kolumny w pandas dataframe

Jeśli nie szukasz usunięcia w miejscu, możesz utworzyć nowy dataframe, określając kolumny za pomocą funkcji DataFrame(...)

my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}

df = pd.DataFrame(my_dict)

Utwórz nową dataframe jako

newdf = pd.DataFrame(df, columns=['name', 'age'])

Dostajesz wynik tak dobry, jak to masz z Del / Drop

2
Deepak K Gupta 9 wrzesień 2018, 06:59

Dobra praktyka, aby zawsze używać notacji []. Jednym z powodów jest to, że nota atrybutu (df.column_name) nie działa dla numerowanych indeksów:

In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])

In [2]: df[1]
Out[2]:
0    2
1    5
Name: 1

In [3]: df.1
  File "<ipython-input-3-e4803c0d1066>", line 1
    df.1
       ^
SyntaxError: invalid syntax
35
Peter Mortensen 23 maj 2018, 19:43