如何检查一个列是否在Pandas中存在

我如何检查一个列是否存在一个熊猫数据框架df?

   A   B    C
0  3  40  100
1  6  30  200

我如何检查列"A"是否存在于上面的DataFrame中,以便我可以计算:

df['sum'] = df['A'] + df['C']

如果"A"不存在:

df['sum'] = df['B'] + df['C']
519554 次浏览

这是可行的:

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语句的方法,您可以对DataFrames使用get()方法。执行基于问题的和:

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

DataFrame get方法的行为与python字典类似。

你可以使用set的方法issuperset:

set(df).issuperset(['A', 'B'])
# set(df.columns).issuperset(['A', 'B'])

你也可以在列上调用isin()来检查它是否存在,并在结果上调用any()来将它减少为一个布尔值1:

if df.columns.isin(['A', 'C']).any():
# do something

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

if 'A' not in df:
# do something

或者与isin().any()一起调用。

if not df.columns.isin(['A', 'C']).any():
# do something

1:在列上调用isin()将返回一个布尔数组,如果它是AC,则其值为True,否则为False。数组的真值是不明确的,因此any()调用将其减少为一个True/False值。