Pytanie Jak sprawdzić, czy kolumna istnieje w Pandach


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

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ę to obliczyć df['sum'] = df['B'] + df['C'] zamiast.


118
2017-07-21 16:43


pochodzenie




Odpowiedzi:


To zadziała:

if 'A' in df:

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

if 'A' in df.columns:

243
2017-07-21 16:48





Aby to sprawdzić albo więcej wszystkie kolumny istnieją, możesz użyć set.issubset, jak w:

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

Jak zaznacza @brianpck w komentarzu, set([]) można alternatywnie skonstruować za pomocą nawiasów klamrowych:

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

Widzieć to pytanie do dyskusji na temat składni nawiasów klamrowych.

Możesz też użyć funkcji sprawdzania list, jak w:

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

31
2017-09-07 13:55



Lub tylko {'A', 'B'}.issubset() - brianpck
@brianpck - dodaj, że jest to najbardziej elegancka metoda. - pshep123


Aby zasugerować inny sposób bez użycia instrukcji if, możesz użyć skrótu get() metoda dla DataFrames. Aby wykonać sumę w oparciu o pytanie:

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

The DataFrame Metoda get ma podobne zachowanie jak słowniki python.


4
2018-05-22 18:28