Як перевірити, чи існує стовпець у Pandas


274

Чи є спосіб перевірити, чи існує стовпець у DataFrame Pandas?

Припустимо, у мене є така 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

і я хочу порахувати df['sum'] = df['A'] + df['C']

Але спочатку я хочу перевірити, чи df['A']існує, а якщо ні, то я хочу df['sum'] = df['B'] + df['C']замість цього обчислити .

Відповіді:


585

Це спрацює:

if 'A' in df:

Але для наочності я б, мабуть, записав це як:

if 'A' in df.columns:

2
інакше навколо можна скористатися: if not 'A' in df.columns:виконати операцію, якщо Aїї немаєdf
Робвх

81

Щоб перевірити, чи існують один чи кілька стовпців, ви можете використовувати set.issubset, як у:

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

Як в коментарі вказує @brianpck, set([])альтернативно можна побудувати фігурні дужки,

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

Дивіться це запитання для обговорення синтаксису фігурних дужок.

Або ви можете використати розуміння списку, як у:

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

11
Або просто{'A', 'B'}.issubset()
brianpck

7

Просто запропонувавши інший спосіб без використання операторів if, ви можете використовувати get()метод для DataFrames. Для виконання суми на основі запитання:

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

Метод DataFrameget має подібну поведінку, як і словники python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.