将Polars的pl.Object列转为pl.String时触发ComputeError问题
问题原因
你遇到的ComputeError是因为numpy生成的数组中,None以Python原生NoneType的形式存在,而Polars在默认严格模式(strict=True)下,不允许将NoneType直接转换为String类型——Polars的字符串列仅支持字符串值和Polars原生Null,不兼容Python原生None。
解决方案
两种无需删除缺失值的处理方式:
方式1:转换时关闭严格模式
在cast方法中设置strict=False,Polars会自动将Python的None转为Polars Null,同时完成字符串类型转换:
import numpy as np import polars as pl rng = np.random.default_rng(12345) df = pl.LazyFrame( data={ "date": rng.choice( [None, "03.04.1998", "03.05.1834", "05.06.2025"], 100 ), } ) # 关键参数:strict=False df.with_columns(pl.col("date").cast(pl.String, strict=False)).collect()
方式2:创建Series时指定字符串类型
用Polars的Series包装数据并指定dtype=pl.String,numpy中的None会被直接解析为Polars Null,后续无需额外转换:
import numpy as np import polars as pl rng = np.random.default_rng(12345) df = pl.LazyFrame( data={ "date": pl.Series( values=rng.choice([None, "03.04.1998", "03.05.1834", "05.06.2025"], 100), dtype=pl.String ), } ) # 此时date列已为String类型,直接收集结果即可 df.collect()
内容的提问来源于stack exchange,提问作者Björn
相关产品推荐
相关产品推荐

