【发布时间】: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