Как проверить, существует ли столбец в Пандах

275

Есть ли способ проверить, существует ли столбец в Pandas DataFrame?

Предположим, что у меня есть следующий 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']вместо этого я хочу вычислить .

npires
источник

Ответы:

587

Это будет работать:

if 'A' in df:

Но для ясности, я бы написал это так:

if 'A' in df.columns:
chrisb
источник
2
наоборот, можно использовать: if not 'A' in df.columns:для выполнения операции, если Aее нет вdf
Robvh
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']]):
C8H10N4O2
источник
11
Или просто{'A', 'B'}.issubset()
brianpck
7

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

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

Метод DataFrameget работает аналогично словарям python.

Gerges
источник