繁体   English   中英

Pandas.to_excel 将我的十进制值四舍五入到小数点后 2 位,但在转换为 _csv 时给出准确的结果

[英]Pandas.to_excel rounding my decimal values up to 2 decimal places, but gives accurate results when converted to_csv

我有一个拥有大量记录的 dataframe。

当此 dataframe 转换为 CSV 时,它会给出所有小数点后的准确结果。 然而,当转换为 excel (xlsx) 时,相同的 dataframe 然后十进制值在 Excel 表中四舍五入(其中大部分保留到小数点后两位)。

例如:

CSV output:3363.6499999999999

Excel output:3363.65

我正在 output=BytesIO() 中编写 output 以使用“put(output.getvalue())”将 Excel 保存在 S3 中

output= BytesIO()
writer=pd.ExcelWriter(output)
df.to_excel(writer, index=  False)
writer.save()

我不想圆。 我希望我的实际价值没有任何变化。 如何在不四舍五入的情况下转换 to_excel?

另一个例子:

import xlsxwriter
writer = pd.ExcelWriter('c:/.../pandas_excel_test.xlsx', engine = 'xlsxwriter')
df.to_excel(writer, index=False, sheet_name='Sheet1')

workbook  = writer.book
cell_format1 = workbook.add_format()
cell_format1.set_num_format('0.000')
worksheet.write(1, 0, 3.1415926, cell_format1) 

  

结果

3.142

试试这个例子:

df = pd.DataFrame({
        'date':['1/15/2016','2/1/2016','2/15/2016','3/15/2016'],
        'numA':[1000,2000,3000,4000.3],
        'numB':[10000,20000.2,30000,40000]
    })

writer = pd.ExcelWriter('c:/.../pandas_excel_test.xlsx', engine = 'xlsxwriter')
df.to_excel(writer, index=False, sheet_name='Sheet1')
workbook  = writer.book
worksheet = writer.sheets['Sheet1']
format1 = workbook.add_format({'num_format': '0.00'})
worksheet.set_column('C:C', None, format1)  # Adds formatting to column C
writer.save()

您可以将.add_format({'num_format': '0.00'})中的格式0.00更改为所需的格式,例如0.0000表示四位小数。 请注意,这仅适用于 C 列。

如果要更改所有列的格式,请修改worksheet.set_column('C:C', None, format1) ,例如

worksheet.set_column(0, 3, None, format1) 

其中 0 第一列和 3 最后一列。

在此处查看更多格式: https://xlsxwriter.readthedocs.io/worksheet.html

我是新来的,你能用这个四舍五入到小数点后两位吗?

df['col_name'].apply(lambda x: round(x, 2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM