Polars.write_excel优化:移除i64/f64千分位及f64末尾零
Polars导出Excel的格式问题解决方案
用户问题
原使用Python-Pandas,现转用Python-Polars提升效率。项目中因默认引擎无法检测列类型报错,采用pl.read_excel('abc.xlsx', engine='openpyxl')导入数据。处理步骤如下:
- 通过
df = df.with_columns(sc.by_dtype(pl.Float64).round(2))将所有Float64列保留2位小数; - 使用
pl.write_excel('abc_v2.xlsx')导出时遇到两个问题:- Python中显示为2位小数的
Float64列,导出到Excel后被添加多余末尾零(原Excel无此问题); - Python中无千分位的
Int64和Float64列,导出到Excel后自动添加千分位(原Excel无此问题)。
- Python中显示为2位小数的
已确认pandas.to_excel()无此类问题,询问是否有针对polars.write_excel()的修复方案。
测试代码
import polars as pl import polars.selectors as sc df = pl.read_excel('../Documents/abc.xlsx', engine='openpyxl') df = df.with_columns(sum_per_group = pl.col('Amount').sum().over('ID').sort_by('ID')) df = df.with_columns(sc.by_dtype(pl.Float64).round(2)) df = df.with_columns([ pl.when(pl.col('sum_per_group') != pl.col('Total Amount')) .then(pl.lit('No')) .otherwise(pl.lit('Yes')) .alias('Flag') ]) df.write_excel('abc_v2.xlsx')
补充信息
操作系统区域设置:数字格式为小数点后2位,无千分位分隔符。
截至2025年7月16日的解决方案
- Float64类型末尾零问题:可参考rotabor的float_precision方案。
- 千分位问题:暂不推荐使用
polars.write_excel,建议改用pandas.to_excel或polars.write_csv,原因是polars.write_excel默认依赖的xlsxwriter引擎尚未成熟。
内容的提问来源于stack exchange,提问作者JeffCh
相关产品推荐
相关产品推荐

