如何检查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: