如何在Python Polars中按列指定小数位数将浮点型转为字符串?
解决Polars指定部分列按自定义小数位写入CSV的问题
问题原因
你使用pl.format("{:.3f}", pl.col("col"))时报错,是因为Polars的format函数要求占位符数量与传入的参数数量严格匹配。只要确保格式化字符串的占位符和列参数一一对应即可避免这个错误,同时无需使用apply。
解决方案
方法1:逐个列指定格式化规则
针对需要自定义小数位的列,单独用pl.format生成带指定小数位的字符串列,再写入CSV:
import polars as pl # 构造示例DataFrame df = pl.DataFrame({ "col1": [1.23456, 2.34567], "col2": [3.456789, 4.56789], "col3": [5.678, 6.789] }) # 对指定列设置小数位:col1保留2位,col2保留3位 formatted_df = df.with_columns( pl.format("{:.2f}", pl.col("col1")).alias("col1"), pl.format("{:.3f}", pl.col("col2")).alias("col2") ) # 写入CSV formatted_df.write_csv("output.csv")
方法2:批量处理多列(映射列与小数位)
如果需要处理的列较多,可通过字典映射列名和对应小数位,批量生成格式化表达式:
import polars as pl df = pl.DataFrame({ "col1": [1.23456, 2.34567], "col2": [3.456789, 4.56789], "col3": [5.678, 6.789] }) # 定义列名到小数位的映射 precision_map = {"col1": 2, "col2": 3} # 批量生成格式化语句 format_exprs = [ pl.format(f"{{:.{prec}f}}", pl.col(col)).alias(col) for col, prec in precision_map.items() ] formatted_df = df.with_columns(format_exprs) formatted_df.write_csv("output.csv")
关键说明
pl.format的格式化字符串中,占位符{}必须和后面传入的列参数数量一致,比如"{:.2f}"对应1个列参数,完全匹配就不会触发报错。- 转换后的列会变为字符串类型,写入CSV时会严格保留指定的小数位数;未处理的浮点列可结合
write_csv的float_precision参数统一设置输出规则。
内容的提问来源于stack exchange,提问作者FObersteiner
相关产品推荐
相关产品推荐

