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

Pandas - compare loaded data to processed data

我正在编写一个单元测试,它应该将保存的 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

Pandas 显示差异,尽管值看起来相等。如果我四舍五入,比较成功。

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

浮点数的问题在于精度。如您所料,您的数字非常接近但不完全相同:

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.isclose or numpy.allclose,它专门用于测试接近的数字。有两个参数 rtolatol 用于指定自定义相对或绝对公差。

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

# or 
np.allclose(df, df2)

输出:True