任何人都可以解释为什么在Pandas(0.18.0)中评估为真:
>>> import pandas as pd
>>> pd.DatetimeIndex(['1971-10-01'], dtype='datetime64[ns]',
freq=None).equals(pd.Index([u'100171'], dtype='object'))
True
这些索引对象具有不同的元素和不同的dtypes。它们的机制是一样的吗?
(我看到1971-10-01的日期可以用mmddyy格式写成100171。这不应该有资格获得平等。)
如何编写比较两个数据帧的断言
df1 = pd.DataFrame([1], columns=pd.DatetimeIndex(['1971-10-01'],
dtype='datetime64[ns]', freq=None)
df2 = pd.DataFrame([1], columns=pd.Index(['100171'], dtype='object')
assert df1.equals(df2) # this assertion succeeds!?
失败,因为索引实际上是不同的?
答案 0 :(得分:3)
这实际上是病态案例。
In [1]: i1 = pd.DatetimeIndex(['1971-10-01'], dtype='datetime64[ns]', freq=None)
In [2]: i2 = pd.Index([u'100171'], dtype='object')
In [3]: i1
Out[3]: DatetimeIndex(['1971-10-01'], dtype='datetime64[ns]', freq=None)
In [4]: pd.DatetimeIndex(i2)
Out[4]: DatetimeIndex(['1971-10-01'], dtype='datetime64[ns]', freq=None)
.equals
尝试强制转换为相同类型,例如字符串被强制转换(如果可能);在这种情况下,他们真的是平等的。
我创建了一个问题here,如果有人想查看我们是否可以删除此类案例。