Pandas-将加载的数据与处理的数据进行比较



我正在编写一个单元测试,它应该将保存的CSV已知结果与处理的结果进行比较。虽然结果数据相等,但我的测试失败了。我的猜测是Panndas以某种方式对值进行了舍入,所以我创建了以下片段来测试我的猜测:

import pandas as pd
df = pd.DataFrame({'val':[-0.41676538151302184]})
df.to_csv('tmp.csv',index=False)
# Load the saved CSV and compare it
df2 = pd.read_csv('./tmp.csv')
df2.val.compare(df.val)

self     other
0 -0.416765 -0.416765

熊猫显示了差异,尽管数值看起来是相等的。如果我四舍五入的价值观,比较成功。

将保存的数据与计算的数据进行比较的正确方法是什么?

浮点数的问题在于精度。正如你所猜测的,你的数字非常接近,但并不完全相同:

df.iloc[0,0]
-0.41676538151302184
df2.iloc[0,0]
-0.4167653815130218
with pd.option_context('display.float_format', '{:.20f}'.format):
display(df2.val.compare(df.val))
self                   other
0 -0.41676538151302178203 -0.41676538151302183755

一种选择是使用numpy.isclosenumpy.allclose,它们是专门为测试闭合数而设计的。有两个参数rtolatol用于指定自定义的相对或绝对公差。

import numpy as np
np.isclose(df, df2).all()
# or 
np.allclose(df, df2)

输出:True

相关内容

  • 没有找到相关文章

最新更新