使用 pandas 读取 excel 时精度损失
Posted
技术标签:
【中文标题】使用 pandas 读取 excel 时精度损失【英文标题】:loss of precision when using pandas to read excel 【发布时间】:2016-09-26 07:21:30 【问题描述】:我尝试使用 pandas 将 excel 表读入数据框,但对于浮点列,数据读取不正确。我使用函数 read_excel() 来完成任务
在 excel 中,该值为 225789.479905466,而在数据框中,该值为 225789.47990546614,这使我无法将数据从 excel 导入数据库。
有没有人面临与 pandas.read_exel() 相同的问题。我没有问题将 csv 读取到数据框。
杰里米
【问题讨论】:
floating-point-gui.de 在导出到 csv(使用 Excel)然后使用 read_csv 时是否有同样的问题? 其实我只是检查的更详细,如果我使用 read_csv,我也会遇到同样的问题,我的一些单元格的精度高达 8 或 9 个数字 如果您导出为 CSV,然后在 CSV 文件中查看其中的数字如何?可能只是当您查看 Excel 时,它没有在屏幕上显示完整的精度。 正如我上面所说,使用 read_csv 加载会给我同样的问题,因为有很多浮点数 【参考方案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% 的差异会显着改变您的分析结果吗?
我敢打赌它不会。
【讨论】:
该文件存储了金额,因此我需要它是准确的 @JeremyNguyen 那么计算机上的浮点精度是错误的方法【参考方案2】:Excel 可能会截断您的值,而不是 pandas。如果您从 Excel 导出到 .csv 并注意操作方式,那么您应该能够使用 pandas.read_csv
读取并维护所有数据。 pandas.read_csv
也有一个未记录的 float_precision
kwarg,它可能有用,也可能没用。
【讨论】:
【参考方案3】:您可以应用函数 lambda x : float( ':n'.format( x ) ) 来消除浮点错误,或者至少更正浮点的显示方式。
有关详细信息,请参阅link1 和 link2。
def fix_float_error(x): return float(':n'.format(x))
【讨论】:
以上是关于使用 pandas 读取 excel 时精度损失的主要内容,如果未能解决你的问题,请参考以下文章
java读取文件时 int强制转换为 byte,是如何保证结果正确的??不是损失了精度吗??
在 Pandas 中使用多索引标题读取 excel 时选择列