如何检查Pandas中是否存在列

npi*_*res 217 python dataframe pandas

有没有办法检查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
Run Code Online (Sandbox Code Playgroud)

我想算一算 df['sum'] = df['A'] + df['C']

但首先我要检查是否df['A']存在,如果不存在,我想要计算df['sum'] = df['B'] + df['C'].

chr*_*isb 469

这将有效:

if 'A' in df:
Run Code Online (Sandbox Code Playgroud)

但为了清楚起见,我可能会把它写成:

if 'A' in df.columns:
Run Code Online (Sandbox Code Playgroud)

  • 另一种方式可以使用:``if not 'A' in df.columns:``` 来执行操作,如果``A```` 不存在于````df``` 中 (14认同)

C8H*_*4O2 60

要检查是否存在一个或多个列,您可以使用set.issubset,如:

if set(['A','C']).issubset(df.columns):
   df['sum'] = df['A'] + df['C']                
Run Code Online (Sandbox Code Playgroud)

正如@brianpck在评论中指出的那样,set([])也可以用花括号构建(仅在Python 2.7+中可用):

if {'A', 'C'}.issubset(df.columns):
Run Code Online (Sandbox Code Playgroud)

有关花括号语法的讨论,请参阅此问题.

或者,您可以使用列表推导,如:

if all([item in df.columns for item in ['A','C']]):
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`{'A','B'}.issubset()` (10认同)

cot*_*ail 13

您还可以调用isin()列来检查其中是否存在特定列,并调用any()结果将其减少为单个布尔值1。例如,要检查数据帧是否包含列AC,可以这样做:

if df.columns.isin(['A', 'C']).any():
    # do something
Run Code Online (Sandbox Code Playgroud)

要检查列名是否不存在,可以not在 if 子句中使用运算符:

if 'A' not in df:
    # do something
Run Code Online (Sandbox Code Playgroud)

或随isin().any()通话一起进行。

if not df.columns.isin(['A', 'C']).any():
    # do something
Run Code Online (Sandbox Code Playgroud)

1:isin()对列的调用返回一个布尔数组,如果为Aor 则其值为 True C,否则为 False。数组的真值是不明确的,因此any()call 将其简化为单个 True/False 值。


Ger*_*ges 6

只是为了在不使用if语句的情况下建议另一种方法,可以使用s 的get()方法DataFrame.为了根据问题执行总和:

df['sum'] = df.get('A', df['B']) + df['C']
Run Code Online (Sandbox Code Playgroud)

DataFrameget方法也有类似的行为,Python字典.


Myk*_*tko 6

您可以使用 set 的方法issuperset

set(df).issuperset(['A', 'B'])
# set(df.columns).issuperset(['A', 'B'])
Run Code Online (Sandbox Code Playgroud)