So überprüfen Sie, ob in Pandas eine Spalte vorhanden ist

274

Gibt es eine Möglichkeit zu überprüfen, ob eine Spalte in einem Pandas DataFrame vorhanden ist?

Angenommen, ich habe den folgenden DataFrame:

>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
                       'B': [randint(1, 9)*10 for x in xrange(10)],
                       'C': [randint(1, 9)*100 for x in xrange(10)]})
>>> df
   A   B    C
0  3  40  100
1  6  30  200
2  7  70  800
3  3  50  200
4  7  50  400
5  4  10  400
6  3  70  500
7  8  30  200
8  3  40  800
9  6  60  200

und ich möchte berechnen df['sum'] = df['A'] + df['C']

Aber zuerst möchte ich überprüfen, ob es df['A']existiert, und wenn nicht, möchte ich df['sum'] = df['B'] + df['C']stattdessen berechnen .

npires
quelle

Antworten:

584

Das wird funktionieren:

if 'A' in df:

Aber aus Gründen der Klarheit würde ich es wahrscheinlich schreiben als:

if 'A' in df.columns:
chrisb
quelle
2
Umgekehrt könnte man verwenden: if not 'A' in df.columns:um eine Operation auszuführen, wenn Asie indf
Robvh
81

Um zu überprüfen, ob eine oder mehrere Spalten vorhanden sind, können Sie Folgendes verwenden set.issubset:

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

Wie @brianpck in einem Kommentar hervorhebt, set([])kann alternativ mit geschweiften Klammern konstruiert werden,

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

In dieser Frage finden Sie eine Erläuterung der Syntax für geschweifte Klammern.

Oder Sie können ein Listenverständnis verwenden, wie in:

if all([item in df.columns for item in ['A','C']]):
C8H10N4O2
quelle
11
Oder einfach{'A', 'B'}.issubset()
Brianpck
7

Um einen anderen Weg ohne if-Anweisungen vorzuschlagen, können Sie die get()Methode für DataFrames verwenden. Für die Durchführung der Summe anhand der Frage:

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

Die DataFrameget-Methode verhält sich ähnlich wie Python-Wörterbücher.

Gerges
quelle