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 .

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:

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']]):

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.