使用 Pandas 读取 Excel 时精度下降

loss of precision when using pandas to read excel

提问人:Jeremy Nguyen 提问时间:5/28/2016 更新时间:5/30/2021 访问量:6213

问:

我尝试使用 pandas 将 excel 工作表读入数据帧,但对于浮点列,数据读取不正确。我使用函数 read_excel() 来完成任务

在 excel 中,值是 225789.479905466,而在 DataFrame 中,值是 225789.47990546614,这给我将数据从 excel 导入数据库带来了差异。

有没有人在 pandas.read_exel() 中遇到同样的问题。我在将 csv 读取到 DataFrame 时没有问题。

杰里米

python excel pandas 数据帧 精度

评论

2赞 Paul H 5/28/2016
floating-point-gui.de
0赞 Andy Hayden 5/28/2016
在导出到 csv(使用 Excel)然后使用 read_csv 时是否遇到同样的问题?
0赞 Jeremy Nguyen 5/28/2016
实际上我只是更详细地检查了,如果我使用 read_csv,我也会遇到同样的问题,我的一些单元格的精度高达 8 或 9 个数字
2赞 leekaiinthesky 5/28/2016
如果导出为 CSV,然后在 CSV 文件中查看有哪些数字,怎么样?可能只是当您查看 Excel 时,它没有在屏幕上显示全部精度。
0赞 Jeremy Nguyen 6/2/2016
正如我上面所说,使用 read_csv 加载给我带来了与大量浮点数相同的问题

答:

0赞 Paul H 5/28/2016 #1

我相信这只是浮点错误和/或默认的 Excel 视图没有向您显示数字的完整精度。

还要考虑以下几点:

from decimal import Decimal
x = Decimal(225789.479905466)
y = Decimal(225789.47990546614)  
print(abs(x - y)/y)
6.444904002816901933512563658E-16

那么,6.5e-14%的差异是否会有意义地改变您的分析结果?

我敢打赌它不会。

评论

0赞 Jeremy Nguyen 6/2/2016
该文件存储金额,因此我需要它是准确的
1赞 Paul H 6/2/2016
@JeremyNguyen那么,计算机上的浮点精度是错误的方法
0赞 htln 6/3/2016 #2

Excel 可能会截断您的值,而不是 pandas。如果从 Excel 导出为 .csv 并注意操作方式,则应该能够读取和维护所有数据。 还有一个未记录的 kwarg,可能有用,也可能没有用。pandas.read_csvpandas.read_csvfloat_precision

0赞 Zachary Chiodini 2/12/2021 #3

您可以应用函数 lambda x : float( '{:n}'.format( x ) ) 来删除浮点错误,或者至少更正浮点的显示方式。

有关详细信息,请参阅 link1link2

def fix_float_error(x): return float('{:n}'.format(x))