【问题标题】:loss of precision when using pandas to read excel使用 pandas 读取 excel 时精度损失
【发布时间】:2016-09-26 07:21:30
【问题描述】:

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

在 excel 中,该值为 225789.479905466,而在数据框中,该值为 225789.47990546614,这使我无法将数据从 excel 导入数据库。

有没有人面临与 pandas.read_exel() 相同的问题。我没有问题将 csv 读取到数据框。

杰里米

【问题讨论】:

  • 在导出到 csv(使用 Excel)然后使用 read_csv 时是否有同样的问题?
  • 其实我只是检查的更详细,如果我使用 read_csv,我也会遇到同样的问题,我的一些单元格的精度高达 8 或 9 个数字
  • 如果您导出为 CSV,然后在 CSV 文件中查看其中的数字如何?可能只是当您查看 Excel 时,它没有在屏幕上显示完整的精度。
  • 正如我上面所说,使用 read_csv 加载会给我同样的问题,因为有很多浮点数

标签: python excel pandas dataframe precision


【解决方案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 ) ) 来消除浮点错误,或者至少更正浮点的显示方式。

    有关详细信息,请参阅link1link2

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2014-07-13
      • 1970-01-01
      • 2018-05-21
      相关资源
      最近更新 更多