【问题标题】:XLSXWriter Pandas Export Truncates or Rounds NumbersXLSXWriter Pandas 导出截断或舍入数字
【发布时间】:2018-12-31 18:06:07
【问题描述】:

我在使用 xlsxwriter 导出数据帧时遇到问题。具有非常长的数据库键整数的列将被截断并以科学计数法显示。如何设置 pandas 和 xlsxwriter 以将整个数字通过数据框传递给 xlsxwriter,而不是给我一个截断的结果?

我遇到问题的列是newdf['Record ID'],所以请帮我调整下面的代码,以便整个数字都通过。

我尝试将其转换为字符串,但它仍然在 Excel 中显示为科学计数法中的截断数字。我认为科学记数法很好,但我不能承受截断。

    output = io.BytesIO()
    writer = pd.ExcelWriter(output, engine='xlsxwriter')
    newdf.to_excel(writer, sheet_name='NewDF Sheet')
    writer.save()
    resp = make_response(output.getvalue())
    resp.headers["Content-Disposition"] = "attachment; filename=output.xlsx"
    resp.headers["Content-Type"] = "application/vnd.ms-excel"

上面的代码在烧瓶应用程序中运行,并将数据帧导出到 xlsx 文件。数据框包含列 newdf['Record ID'] 应该导出整个数字,但它只导出前几位数字并且结尾显示为零。这也以科学记数法显示。

更新:我通过将 excel writer 中的选项设置为 options={'strings_to_numbers': False} 解决了我的问题,如下所示。该列实际上已经是 pandas 中的字符串,但仍由 excelwriter 写入为数字,除非您设置此选项。我在我的答案中包含了字符串转换以获得完整的解决方案。

writer = pd.ExcelWriter(output, engine='xlsxwriter', options={'strings_to_numbers': False})
newdf['Record ID'] = newdf['Record ID'].astype('str')
newdf.to_excel(writer, sheet_name='NewDF Sheet', index=False)
writer.save()

【问题讨论】:

  • 整数有多少位? Excel 对所有整数和浮点数据使用 IEEE-754 双浮点数。其一般精度为 15 位。要编写更长的整数,您必须通过将它们转换为数据框中的字符串来将它们写为字符串。
  • 所以这为我指明了正确的方向,但我必须设置 string_to_numbers 设置才能让它工作。我只需要文本形式的数据。如果有人需要数字,他们是否可以在该列上运行单元格格式以在写入后将其转换为数字?

标签: python pandas xlsxwriter


【解决方案1】:

我通过将 excel writer 中的选项设置为 options={'strings_to_numbers': False} 解决了我的问题,如下所示。该列实际上已经是 pandas 中的字符串,但仍由 excelwriter 写入为数字,除非您设置此选项。我在我的答案中包含了字符串转换以获得完整的解决方案。

writer = pd.ExcelWriter(output, engine='xlsxwriter', options={'strings_to_numbers': False})
newdf['Record ID'] = newdf['Record ID'].astype('str')
newdf.to_excel(writer, sheet_name='NewDF Sheet', index=False)
writer.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2015-03-04
    • 2010-10-13
    • 2021-03-07
    相关资源
    最近更新 更多