Jak sprawdzić, czy kolumna istnieje w Pandach

274

Czy istnieje sposób sprawdzenia, czy kolumna istnieje w ramce danych Pandas?

Załóżmy, że mam następujące 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

i chcę obliczyć df['sum'] = df['A'] + df['C']

Ale najpierw chcę sprawdzić, czy df['A']istnieje, a jeśli nie, chcę obliczyć df['sum'] = df['B'] + df['C'].

npires
źródło

Odpowiedzi:

585

To zadziała:

if 'A' in df:

Ale dla jasności prawdopodobnie napisałbym to jako:

if 'A' in df.columns:
chrisb
źródło
2
w innym przypadku można użyć: if not 'A' in df.columns:do wykonania operacji, jeśli Anie jest obecny wdf
Robvh
81

Aby sprawdzić, czy istnieje co najmniej jedna kolumna, możesz użyć set.issubset, jak w:

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

Jak wskazuje @brianpck w komentarzu, set([])można alternatywnie budować z nawiasami klamrowymi,

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

Zobacz to pytanie, aby omówić składnię nawiasów klamrowych.

Lub możesz użyć rozumienia listy, jak w:

if all([item in df.columns for item in ['A','C']]):
C8H10N4O2
źródło
11
Lub po prostu{'A', 'B'}.issubset()
brianpck,
7

Aby zasugerować inny sposób bez użycia instrukcji if, możesz użyć get()metody dla DataFrames. Aby wykonać sumę na podstawie pytania:

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

Metoda DataFrameget działa podobnie jak słowniki w języku Python.

Gerges
źródło