检查熊猫系列中的整数

时间:2021-06-18 17:16:45

标签: python pandas numpy series

在 Pandas 整数列中查找整数 id 编号时,我遇到了一个令人惊讶的结果,我知道该编号在列表中。我现在已经把它归结为一个让我感到困惑的非常简单的测试用例。我显然遗漏了一些非常明显的东西?!

这是我重现问题的方式:

import numpy as np
import pandas as pd

# Create two pandas objects; col_2 is an np.int64 
source_series_1 = pd.DataFrame({'col_1': ['a','b','c','d'], 'col_2':np.int64([1, 2, 3, 4])})
source_series_2 = pd.DataFrame({'col_1': ['a','b','c','d'], 'col_2':np.int64([101, 102, 103, 104])})

现在测试这些 dfs 中的成员资格:

# Test membership in pandas series
print(np.int64(2) in source_series_1.col_2)
print(np.int64(102) in source_series_2.col_2)

输出:

True
False # ?!
# But! convert to a simple list...
print(np.int64(2) in list(source_series_1.col_2))  
print(np.int64(102) in list(source_series_2.col_2))

输出:

True
True

我注意到在没有显式转换的情况下,我得到了相同的输出:

print(2 in source_series_1.col_2) #True
print(102 in source_series_2.col_2) #False

显然有一些非常简单的事情正在发生,我只是想念/忘记了。我很想了解为什么 source_series_2 未通过“in”测试?

2 个答案:

答案 0 :(得分:0)

嗯,我认为这里的问题在于函数的内部工作。

print(np.int64(2) in source_series_1.col_2)
print(np.int64(102) in source_series_2.col_2)

在您的情况下,这会查看 DataFrame/Series 的索引(source_series_1.col_2 或 source_series_2.col_2)。

在哪里

print(np.int64(2) in list(source_series_1.col_2))  
print(np.int64(102) in list(source_series_2.col_2))

在值中明确列出搜索,因为没有索引。

我是如何得出这个结论的,如果你搜索

print(np.int64(2) in source_series_1.col_2)
print(np.int64(2) in source_series_2.col_2)

你会得到

True
True

我希望这会有所帮助!

答案 1 :(得分:0)

pd.Series 不打算以这种方式与 'in' 运算符一起使用。 例如: 这有效,但没有意义,对吗?

np.int64(1) in source_series_2.col_2
>>>True
np.int64(2) in source_series_2.col_2
>>>True

但是,如果您查看需要执行的操作的实际实现,您可以使用它,因为它对元素进行了实际匹配。

getattr(source_series_2.col_2,'__eq__')(101)

输出:

0     True
1    False
2    False
3    False
Name: col_2, dtype: bool