导出Polars DataFrame至CSV时前导零丢失的原因及保留方法
解决Polars导出CSV时保留字符串列前导零的问题
要保留带前导零的字符串列导出后的格式,核心要做好两点:保证列的类型是字符串,以及确保导出时格式不被篡改。
1. 确认并强制列类型为字符串
Polars有时会自动将带前导零的字符串推断为数值类型(整数/浮点数),这会直接导致前导零丢失。先检查列的类型:
print(df.schema)
如果目标列不是Utf8类型,需要将其转换为字符串:
- 读取数据时直接指定类型:
df = pl.read_csv("input.csv", dtypes={"target_column": pl.Utf8}) - 对已有的DataFrame转换类型:
df = df.with_columns(pl.col("target_column").cast(pl.Utf8))
2. 导出CSV时确保字符串格式保留
只要列是字符串类型,Polars的write_csv默认会保留前导零。如果担心后续用Excel等工具打开时被误解析为数值,可以通过quote_style参数强制用引号包裹字符串:
# 默认导出,文件中会保留前导零(用文本编辑器可查看) df.write_csv("output.csv") # 强制给字符串列添加引号,避免被Excel等工具自动转换 df.write_csv("output_quoted.csv", quote_style="necessary")
示例验证
import polars as pl # 创建测试DataFrame df = pl.DataFrame({ "order_id": ["0001", "0010", "0100"], "amount": [150, 200, 300] }) # 确认order_id是字符串类型 print(df.schema) # 输出: {'order_id': Utf8, 'amount': Int64} # 导出CSV df.write_csv("orders.csv")
用文本编辑器打开orders.csv,可以看到order_id列的前导零完全保留。如果用Excel打开,建议先将单元格格式设置为文本,再导入文件,避免Excel自动转换格式。
内容的提问来源于stack exchange,提问作者myamulla_ciencia
相关产品推荐
相关产品推荐

