假设我有两个等效的数据框:
df1 = pd.DataFrame({'a': [None, None, None]})
df2 = pd.DataFrame({'a': [None, None, None]})
当我这样使用 isin 方法时:
df1.isin(df2)
我得到以下输出:
'一个' | |
---|---|
0 | 错误的 |
1 | 错误的 |
2 | 错误的 |
我希望结果对所有人都是正确的。为什么我没有得到预期的结果?
感谢社区的任何指导和澄清,谢谢!
这是因为 pandas 将转换None
为np.nan
, 而:
>>> np.nan == np.nan
False
>>>
给False
.
这是因为np.nan
setup 所有np.nan
s 都是不同的对象,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