You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars.write_excel优化:移除i64/f64千分位及f64末尾零

Polars导出Excel的格式问题解决方案

用户问题

原使用Python-Pandas,现转用Python-Polars提升效率。项目中因默认引擎无法检测列类型报错,采用pl.read_excel('abc.xlsx', engine='openpyxl')导入数据。处理步骤如下:

  1. 通过df = df.with_columns(sc.by_dtype(pl.Float64).round(2))将所有Float64列保留2位小数;
  2. 使用pl.write_excel('abc_v2.xlsx')导出时遇到两个问题:
    • Python中显示为2位小数的Float64列,导出到Excel后被添加多余末尾零(原Excel无此问题);
    • Python中无千分位的Int64和Float64列,导出到Excel后自动添加千分位(原Excel无此问题)。

已确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:20:02