Ответ 1
Это будет работать:
if 'A' in df:
Но для ясности я, вероятно, написал бы это как:
if 'A' in df.columns:
Есть ли способ проверить, существует ли столбец в 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']
.
Это будет работать:
if 'A' in df:
Но для ясности я, вероятно, написал бы это как:
if 'A' in df.columns:
Чтобы проверить, существует ли один или несколько столбцов, вы можете использовать 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']]):
Чтобы предложить другой способ без использования операторов if, вы можете использовать метод get()
для DataFrame
s. Для выполнения суммы, основанной на вопросе:
df['sum'] = df.get('A', df['B']) + df['C']
Метод DataFrame
get имеет аналогичное поведение, как словари python.