1

假设我有两个等效的数据框:

df1 = pd.DataFrame({'a': [None, None, None]})
df2 = pd.DataFrame({'a': [None, None, None]})

当我这样使用 isin 方法时:

df1.isin(df2)

我得到以下输出:

'一个'
0 错误的
1 错误的
2 错误的

我希望结果对所有人都是正确的。为什么我没有得到预期的结果?

感谢社区的任何指导和澄清,谢谢!

4

1 回答 1

0

这是因为 pandas 将转换Nonenp.nan, 而:

>>> np.nan == np.nan
False
>>> 

False.

这是因为np.nansetup 所有np.nans 都是不同的对象,np.nan是从 pythons 继承的float('nan'),如您所见:

>>> id(float('nan'))
1881571529008
>>> id(float('nan'))
1881618531856
>>> 

它们是不同的对象!

一个示例实现np.nan != np.nan可能是:

class nan:
    def __repr__(self):
        return 'nan'
    def __eq__(self, other):
        return False
print(nan() == nan())
print(nan())

输出:

False
nan
于 2021-08-29T03:41:41.927 回答