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


есть ли способ проверить, существует ли столбец в фрейме данных Pandas?

предположим, что у меня есть следующие таблицы данных:

>>> 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'] существует, а если нет, то я хочу вычислить .

3 128

3 ответа:

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

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([]) может быть также построен с фигурными скобками (доступно только в Python 2.7+):

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']

The DataFrame метод get имеет такое же поведение, как и словари python.