如何检查Pandas中是否存在某列
我怎么检查一个列在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。比如,如果你想检查一个数据框里是否包含列 A 或 C,可以这样做:
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)。因为数组的真值有点模糊,所以使用 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: