Wie wählt man alle Spalten außer einer Spalte in Pandas aus?

Lesezeit: 4 Minuten

Wie wahlt man alle Spalten auser einer Spalte in Pandas
markov zain

Ich habe einen Datenrahmen, der so aussieht:

import pandas
import numpy as np
df = DataFrame(np.random.rand(4,4), columns = list('abcd'))
df
      a         b         c         d
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

Wie bekomme ich alle Spalten außer column b?

  • @cs95 — Das derzeit aufgeführte doppelte Ziel ist kein Duplikat. Trotz des ursprünglichen Titels lautet die verlinkte Frage “Warum funktioniert diese spezifische Syntax nicht”, während diese Frage eine allgemeinere “Wie geht das am besten?” — Hinzu kommt der Unterschied zwischen dem Löschen einer Spalte aus einem vorhandenen DataFrame und dem Erstellen eines neuen DataFrame mit allen bis auf eine der Spalten eines anderen.

    – RM

    21. Mai ’19 um 19:30

  • @RM Es tut mir leid, aber ich stimme der Bearbeitung des Titels in diesem Beitrag nicht zu, daher habe ich ihn zurückgesetzt. Es stimmt, dass die Absicht des OP darin bestand, die Syntax in Frage zu stellen, aber der Beitrag ist gewachsen, um die allgemeinere Frage zum Löschen einer Spalte zu beantworten. Die Antworten in diesem Beitrag sind Kopien des dort am höchsten bewerteten Beitrags. Der Duplikat bleibt.

    – cs95

    21. Mai ’19 um 19:46


  • Beachten Sie, dass diese Frage auf Meta diskutiert wird.

    – Ketzeraffe

    21. Mai ’19 um 21:24

Wie wahlt man alle Spalten auser einer Spalte in Pandas
Marius

Wenn die Spalten kein MultiIndex sind, df.columns ist nur ein Array von Spaltennamen, damit Sie Folgendes tun können:

df.loc[:, df.columns != 'b']

          a         c         d
0  0.561196  0.013768  0.772827
1  0.882641  0.615396  0.075381
2  0.368824  0.651378  0.397203
3  0.788730  0.568099  0.869127

  • Nicht schlecht, aber @mikes Lösung mit drop ist IMO besser. Etwas besser lesbar und handhabt Multiindizes

    – travc

    30. Juni ’17 um 0:24


  • Ich stimme tatsächlich zu, dass @mikes Lösung mit drop ist besser – ich denke, es ist nützlich zu entdecken, dass (einstufige) Spalten Arrays sind, mit denen Sie arbeiten können, aber speziell zum Löschen einer Spalte. drop ist sehr gut lesbar und funktioniert gut mit komplexen Indizes.

    – Marius

    23. April ’19 um 23:06

  • Vielen Dank für diese tolle Antwort. Was ist, wenn ich keinen Header habe? wie spreche ich an?

    – FabioSpaghetti

    17. September ’19 um 14:03

  • Was ist, wenn Sie mehr als 1 Spalte ignorieren müssen?

    – Bruno Ambrozio

    26. März ’20 um 9:06

  • @Marius Funktioniert das mit mehreren Spalten (sagen wir zwei)?

    – MasayoMusic

    23. Juni ’20 um 22:58

1641758299 678 Wie wahlt man alle Spalten auser einer Spalte in Pandas
Mike

Nicht verwenden ix. Es ist veraltet. Die lesbarste und idiomatischste Art, dies zu tun, ist df.drop():

>>> df

          a         b         c         d
0  0.175127  0.191051  0.382122  0.869242
1  0.414376  0.300502  0.554819  0.497524
2  0.142878  0.406830  0.314240  0.093132
3  0.337368  0.851783  0.933441  0.949598

>>> df.drop('b', axis=1)

          a         c         d
0  0.175127  0.382122  0.869242
1  0.414376  0.554819  0.497524
2  0.142878  0.314240  0.093132
3  0.337368  0.933441  0.949598

Beachten Sie, dass standardmäßig .drop() funktioniert nicht an Ort und Stelle; Trotz des unheilvollen Namens, df bleibt bei diesem Vorgang unversehrt. Wenn Sie dauerhaft entfernen möchten b von df, tun df.drop('b', inplace=True).

df.drop() akzeptiert auch eine Liste von Labels, zB df.drop(['a', 'b'], axis=1) wird Spalte fallen lassen a und b.

  • Funktioniert auch auf einem Multiindex, wie Sie es erwarten würden. df.drop([('l1name', 'l2name'), 'anotherl1name'], axis=1). Scheint Liste vs. Tupel zu verwenden, um zu bestimmen, ob Sie mehrere Spalten (Liste) oder auf einen Multiindex (Tupel) verweisen möchten.

    – travc

    30. Juni ’17 um 0:20


  • Besser lesbar: df.drop(columns='a') oder df.drop(columns=['a', 'b']). Kann auch ersetzen columns= mit index=.

    – KugelschreiberBen

    9. Mai ’18 um 13:52

  • Dies ist jedoch nicht nützlich, wenn Sie passieren nicht um die Namen aller Spalten zu kennen, die Sie löschen möchten.

    – yeliabsalohcin

    4. September ’18 um 16:17

  • Da dies eine Kopie und keine Ansicht/Referenz erstellt, können Sie den ursprünglichen Datenrahmen nicht ändern, indem Sie ihn auf der linken Seite einer Zuordnung verwenden.

    – Jan Christoph Terasa

    15. Apr. ’20 um 18:58

  • @JanChristophTerasa Wissen Sie zufällig, wie Sie diese ausgewählten Spalten innerhalb des ursprünglichen df ändern können (z. B. alle diese Spalten mit Werten einer anderen Spalte multiplizieren). Wenn ich diese Werte ändere, müsste ich die gelöschte Spalte am Ende anheften, was nicht der beste Weg zu sein scheint.

    – MasayoMusic

    23. Juni ’20 um 22:48


df[df.columns.difference(['b'])]

Out: 
          a         c         d
0  0.427809  0.459807  0.333869
1  0.678031  0.668346  0.645951
2  0.996573  0.673730  0.314911
3  0.786942  0.719665  0.330833

  • Ich mag diesen Ansatz, da er verwendet werden kann, um mehr als eine Spalte wegzulassen.

    – Nischal Hp

    30. August ’17 um 9:42

  • @NischalHp df.drop kann auch mehr als eine Spalte weglassen df.drop([‘a’, ‘b’], Achse=1)

    – JACKY Li

    25. Apr. ’19 um 13:02

  • Ich denke, es ist erwähnenswert, dass dies Ihre Spalten neu anordnen kann

    – Ozean800

    18. November ’19 um 6:33

  • @ocean800 Ja, das stimmt. Du kannst passieren sort=False wenn Sie dieses Verhalten vermeiden möchten (df.columns.difference(['b'], sort=False))

    – ayhan

    18. November ’19 um 6:44

Sie können verwenden df.columns.isin()

df.loc[:, ~df.columns.isin(['b'])]

Wenn Sie mehrere Spalten löschen möchten, gehen Sie wie folgt vor:

df.loc[:, ~df.columns.isin(['col1', 'col2'])]

Wie wahlt man alle Spalten auser einer Spalte in Pandas
Mykola Zotko

Sie können drop Spalten im Index:

df[df.columns.drop('b')]

oder

df.loc[:, df.columns.drop('b')]

Ausgabe:

          a         c         d
0  0.418762  0.869203  0.972314
1  0.991058  0.594784  0.534366
2  0.407472  0.396664  0.894202
3  0.726168  0.324932  0.906575

1641758299 220 Wie wahlt man alle Spalten auser einer Spalte in Pandas
Salvador Dali

Hier ist ein anderer Weg:

df[[i for i in list(df.columns) if i != '<your column>']]

Sie übergeben einfach alle anzuzeigenden Spalten mit Ausnahme der nicht gewünschten.

1641758299 350 Wie wahlt man alle Spalten auser einer Spalte in Pandas
Benutzer1718097

Eine weitere geringfügige Änderung an @Salvador Dali ermöglicht eine Liste von auszuschließenden Spalten:

df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

oder

df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

.

238540cookie-checkWie wählt man alle Spalten außer einer Spalte in Pandas aus?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy