【问题标题】:Precision is lost while reading a column from excel using openpyxl使用 openpyxl 从 excel 中读取列时精度丢失
【发布时间】:2020-11-22 12:07:48
【问题描述】:

我正在使用load_workbookopenpyxl 读取存储在excel 工作簿中的内容。 以下是代码,

wb = load_workbook(filename=xlsx_file, read_only=True, data_only=True )
ws = wb.get_sheet_by_name(name=sheet)
data = ws.values
columns = next(data)[0:]
df = pd.DataFrame(data, columns=columns)

我在 excel 中有一个名为 t 的列

当我打印 list(df['t']) 时,我得到

[0.0, 0.6, 1.2, 1.7999999999999998, 2.4, 3.0, 3.5999999999999996, 4.2, 4.8, 5.3999999999999995].

我想知道如何避免精度损失。 使用时出现同样的问题

df = pd.read_excel(open(xlsx_file, 'rb'), sheet_name=sheet, index=False)

【问题讨论】:

  • 检查文件中单元格的格式,很可能它们被格式化到小数点后一位。

标签: python-3.x excel pandas precision openpyxl


【解决方案1】:

只需要设置小数点后的位数:

df['t'] = df['t'].map('{:,.1f}'.format)

【讨论】:

  • 谢谢,拿到dataframe后就可以了。我想知道是否有什么办法可以在加载时按原样获取数字。
  • 尝试添加到 read_excel 命令:float_precision='round_trip'
  • 但是为什么加载后就不能做呢?
  • 因为输入数据的小数点后位数可能不同(2 或 3 或 7 或 ..)。我不想每次都手动查找并设置位数。我之前尝试过使用 read_excel 。当excel文件很大时,加载需要很长时间,所以我不得不切换到load_workbook。
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 2018-03-11
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
相关资源
最近更新 更多