我如何检查一个列是否存在在熊猫数据框架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']

当前回答

这是可行的:

if 'A' in df:

但为了清晰起见,我可能会这样写:

if 'A' in df.columns:

其他回答

这是可行的:

if 'A' in df:

但为了清晰起见,我可能会这样写:

if 'A' in df.columns:

要检查一个或多个列是否都存在,可以使用set。is子集,如:

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

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

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()在列上调用返回一个布尔数组,如果它是a或C,则值为True,否则为False。数组的真值是不明确的,因此任何()调用都将其简化为一个True/False值。

你可以使用set的方法issuperset:

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

为了建议另一种不使用if语句的方法,您可以对DataFrames使用get()方法。执行基于问题的和:

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

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