我刚刚遇到了一些奇怪的行为,使用pd.Dataframe.equals()以下方法比较两个熊猫数据帧的值:
df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df2 = df1.copy()
df1.equals(df2)
# True (obviously)
Run Code Online (Sandbox Code Playgroud)
但是,当我将列类型更改为不同的整数格式时,它们将不再被视为相等:
df1['a'] = df1['a'].astype(np.int32)
df1.equals(df2)
# False
Run Code Online (Sandbox Code Playgroud)
在.equals()文档中,他们指出变量必须具有相同的类型,并提供了一个将浮点数与整数进行比较的示例,但这是行不通的。我没想到这也会扩展到不同类型的整数。
使用 进行相同的比较时==,它确实返回True:
(df1 == df2).all().all()
# True
Run Code Online (Sandbox Code Playgroud)
但是,==不会将两个缺失值评估为彼此相等。
有没有一种优雅的方法来处理缺失值相等,同时不强制执行相同的整数类型?我能想到的最好的是:
(df1.fillna(0) == df2.fillna(0)).all().all()
Run Code Online (Sandbox Code Playgroud)
但是必须有一种更简洁、更简洁的方法来处理这个问题。
我的后续基于意见的问题:您认为这是一个错误吗?
如果您认为这是一个小数问题(即 2 等于 2),那么这可能看起来像一个错误。然而,如果你从解释器的角度来看(即 00000010 是否等于 0000000000000010),那么很明显,确实存在差异。按位运算。
从验证的角度来看,确保您正在比较苹果可能是一个好主意,所以我喜欢@Ben.T的答案:
df1.equals(df2.astype(df1.dtypes))
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?这高于我的工资等级。你可以提交它,然后 pandas 库周围的思考者就可以做出决定。'==' 运算符给出的结果与 '.equals' 函数不同,这看起来确实很奇怪,这可能会影响决策。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |