635 Stimmen

Wie überprüft man, ob eine Spalte in Pandas existiert

Wie überprüfe ich, ob eine Spalte in einem Pandas DataFrame df vorhanden ist?

   A   B    C
0  3  40  100
1  6  30  200

Wie kann ich überprüfen, ob die Spalte "A" im obigen DataFrame vorhanden ist, damit ich berechnen kann:

df['sum'] = df['A'] + df['C']

Und wenn "A" nicht vorhanden ist:

df['sum'] = df['B'] + df['C']

1243voto

chrisb Punkte 50951

Dies wird funktionieren:

if 'A' in df:

Aber für Klarheit würde ich es wahrscheinlich so schreiben:

if 'A' in df.columns:

203voto

C8H10N4O2 Punkte 16753

Um zu überprüfen, ob eine oder mehrere Spalten alle existieren, können Sie set.issubset verwenden, wie zum Beispiel:

if set(['A','C']).issubset(df.columns):
   df['sum'] = df['A'] + df['C']                

Wie @brianpck in einem Kommentar anmerkt, kann set([]) alternativ auch mit geschweiften Klammern erstellt werden,

if {'A', 'C'}.issubset(df.columns):

Sehen Sie sich diese Frage zur Diskussion der geschweiften Klammern Syntax an.

Oder Sie können eine Generator-Liste verwenden, beispielsweise:

if all(item in df.columns for item in ['A','C']):

20voto

Gerges Punkte 5989

Nur um einen anderen Weg vorzuschlagen, ohne Bedingungen zu verwenden, können Sie die get()-Methode für DataFrames verwenden. Um die Summe entsprechend der Frage durchzuführen:

df['sum'] = df.get('A',df['B']) + df['C']

Die DataFrame-Get-Methode hat ein ähnliches Verhalten wie Python-Dictionaries.

14voto

not a robot Punkte 3525

Sie können auch isin() auf den Spalten aufrufen, um zu überprüfen, ob bestimmte Spalte(n) darin existieren, und any() auf das Ergebnis aufrufen, um es auf einen einzigen booleschen Wert zu reduzieren1. Zum Beispiel könnte man überprüfen, ob ein DataFrame die Spalten A oder C enthält, indem man Folgendes macht:

if df.columns.isin(['A', 'C']).any():
    # etwas tun

Um zu überprüfen, ob ein Spaltenname nicht vorhanden ist, können Sie den not Operator im if-Statement verwenden:

if 'A' not in df:
    # etwas tun

oder zusammen mit dem isin().any() Aufruf.

if not df.columns.isin(['A', 'C']).any():
    # etwas tun

1: Der isin() Aufruf auf den Spalten liefert ein boolean Array, dessen Werte True sind, wenn es entweder A oder C ist, und sonst False. Der Wahrheitswert eines Arrays ist mehrdeutig, deshalb reduziert der any() Aufruf es auf einen einzelnen True/False Wert.

6voto

Mykola Zotko Punkte 11977

Sie können die Methode issuperset der Menge verwenden:

set(df).issuperset(['A', 'B'])
# set(df.columns).issuperset(['A', 'B'])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X