Pandas 中判断某个元素是否存在的问题

在使用 Pandas 处理数据的时候,常常需要判断某个元素在 DataFrame 或其中特定的行/列中是否存在,下面给出一个例子以便详细说明:

1
2
3
4
5
6
7
import pandas as pd

data = {'language': ['Java', 'PHP', 'Python'], 'number': [1995, 1995, 1991]}
df = pd.DataFrame(data)

print(1991 in df['number'])
print(1 in df['number'])

你觉得这个程序会输出什么?答案可能让你大吃一惊

1
2
3
[root@localhost test]# python pandas_test.py
False
True

查找了相关资料后,我发现在 Pandas 中,类似 1 in df['number'] 的输出,实际上等价于 1 in df['number'].index ,即判断元素是否存在于索引而非数据中。那么如果要实现判断某个元素是否存在的功能,需要添加 .values 属性,以下代码能够输出预期的结果:

1
2
3
4
5
6
7
import pandas as pd

data = {'language': ['Java', 'PHP', 'Python'], 'number': [1995, 1995, 1991]}
df = pd.DataFrame(data)

print(1991 in df['number'].values)
print(1 in df['number'].values)

输出如下

1
2
3
[root@localhost test]# python pandas_test.py
True
False