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

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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:15