在Polars中解析带千位分隔符的数值数据
解决方案
1. 关闭自动类型推断,强制所有列以字符串读取
要让read_csv完全不自动推断列类型,直接将所有列读取为字符串,可通过dtype参数指定全局类型为pl.Utf8,同时配合infer_schema_length=0彻底关闭推断逻辑:
import polars as pl # 读取UTF-16编码的TSV文件,所有列强制为字符串类型 df = pl.read_csv( "target_file.tsv", separator="\t", encoding="utf-16", dtype=pl.Utf8, infer_schema_length=0 )
2. 批量转换带千位分隔符的数值列
str.strip_chars(",")仅能移除字符串首尾的逗号,无法处理中间的千位分隔符,因此必须用str.replace_all(",", "")全局替换逗号后,再转换为整数类型。如果有多列需要处理,可批量操作:
# 指定需要转换的数值列列表 numeric_columns = ["B", "C", "D"] # 批量清洗千位分隔符并转换为整数 df = df.with_columns( pl.col(numeric_columns) .str.replace_all(",", "") .cast(pl.Int64) )
3. 关于显式指定schema失败的原因
直接在read_csv中指定某列为pl.Int64时,Polars会尝试直接解析原始文本为整数,但文本中的千位分隔符逗号会导致解析逻辑失败,因此无法完成类型转换。必须先以字符串读取,完成格式清洗后再转换类型,这是处理此类格式化数值的标准流程。
内容的提问来源于stack exchange,提问作者David Waterworth
相关产品推荐
相关产品推荐

