Polars将字符串列表转分类列表报错,是否支持该数据类型?
Polars中列表嵌套分类类型的支持与问题解决
Polars支持列表嵌套分类类型(list[Categorical]),你遇到的报错主要由两个问题导致:
- 列名不匹配:你的DataFrame定义的目标列是
b,但代码中错误使用了pl.col('tags'),Polars找不到对应列引发异常 - 部分旧版本Polars对直接
cast转换列表内元素为分类类型的支持存在问题,需要用更稳妥的方式处理
正确实现代码
以下两种方式均可将列表内的字符串转换为分类类型:
方式1:使用list.eval逐个转换元素
import polars as pl df = pl.DataFrame({'a':[1,2,3], 'b':[['a','b'],['a'],['c','d']]}) # 转换列表内每个元素为Categorical,生成新列 df = df.with_columns( pl.col('b').list.eval(pl.element().cast(pl.Categorical)).alias('b_categorical') )
方式2:直接cast为List(Categorical)(适用于较新版本Polars)
确保列名正确,直接转换整个列表列的类型:
import polars as pl df = pl.DataFrame({'a':[1,2,3], 'b':[['a','b'],['a'],['c','d']]}) df = df.with_columns( pl.col('b').cast(pl.List(pl.Categorical)).alias('b_categorical') )
验证类型
执行print(df.schema)可查看列类型,b_categorical会显示为List(Categorical),说明转换成功。
如果仍出现报错,建议升级Polars到最新稳定版本,早期版本对嵌套分类类型的支持存在局限性。
内容的提问来源于stack exchange,提问作者kristianp
相关产品推荐
相关产品推荐

