Polars DataFrame中Object类型列转Float类型报错,如何解决?
在Polars中将Object类型列转为Float类型的解决方案
Polars的Object类型存储的是任意Python对象,无法直接通过cast方法转为数值类型,需要根据列内元素的实际类型选择对应方法处理:
针对不同场景的处理方法
1. 列内是字符串形式的数值
使用str.to_float()方法直接解析字符串为浮点型:
import polars as pl data = {"1": ["1.0", "2.0", "3.0", "4.0"], "2": [10, 20, 30, 40]} df = pl.DataFrame(data, schema={'1':pl.Object, '2':pl.Object}) # 处理字符串型Object列 df = df.with_columns(pl.col('1').str.to_float(strict=False))
2. 列内是整数/数值对象
先将Object转为对应的整数类型,再转为浮点型:
# 处理整数型Object列 df = df.with_columns(pl.col('2').cast(pl.Int64, strict=False).cast(pl.Float64, strict=False))
3. 通用处理方法(兼容两种场景)
使用map_elements将每个元素直接转为float,适合不确定列内元素类型的情况:
df = df.with_columns( pl.col(['1', '2']).map_elements(lambda x: float(x), return_dtype=pl.Float64, strict=False) )
4. 新版本简化方法(Polars 0.19.0+)
如果你的Polars版本≥0.19.0,可以使用parse函数自动解析Object内容为指定类型:
df = df.with_columns(pl.col(['1', '2']).parse(pl.Float64, strict=False))
原代码报错原因
Polars的cast方法仅支持原生类型间的转换,Object类型是Python对象的容器,Polars无法直接推断转换逻辑,因此必须先将Object内的元素转为Polars可识别的类型后再进行转换。
内容的提问来源于stack exchange,提问作者tamtam_
相关产品推荐
相关产品推荐

