如何检查Pandas中是否存在某列

619 投票
6 回答
666242 浏览
提问于 2025-04-18 14:07

我怎么检查一个列在Pandas的DataFrame df中是否存在呢?

   A   B    C
0  3  40  100
1  6  30  200

我怎么检查上面这个DataFrame中是否有列 "A",这样我就可以进行计算:

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

如果 "A" 不存在的话:

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

6 个回答

6

你可以使用集合的一个方法叫做 issuperset

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

你还可以在列上使用 isin() 来检查特定的列是否存在,然后再对结果使用 any(),这样就能把结果简化成一个布尔值(真或假)1。比如,如果你想检查一个数据框里是否包含列 AC,可以这样做:

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() 可以把它简化成一个单一的真或假值。

20

这里有一种不使用if语句的建议,你可以用get()方法来处理DataFrame。如果你想根据问题来进行求和,可以这样做:

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

这个DataFrame的get方法和Python中的字典很像,使用起来也很相似。

198

要检查一个或多个列是否都存在,你可以使用 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']):
1210

这个代码可以正常运行:

if 'A' in df:

不过为了让人更容易理解,我可能会这样写:

if 'A' in df.columns:

撰写回答