Polars map_elements推断嵌套列表列为Null类型而非Int的问题求助
Polars嵌套列表map_elements类型推断问题的解决办法
当处理包含嵌套空列表作为首个元素的序列时,使用Polars的map_elements方法即便指定了返回类型pl.List(pl.List(pl.Int64)),列仍会被推断为List[List[Null]]类型,导致非空列表里的元素被转为null。比如这段测试代码:
import polars as pl s = pl.Series("a", [[[]], [[1, 2]]]) s.map_elements(lambda x: x, return_dtype=pl.List(pl.List(pl.Int64)))
执行后得到的结果不符合预期:
Series: 'a' [list[list[null]]] [ [[]] [[null, null]] ]
我们期望的输出是:
Series: 'a' [list[list[int64]]] [ [[]] [[1, 2]] ]
解决办法
方案1:用cast强制转换类型
先执行map_elements操作,再对结果强制转换为目标类型,绕过自动类型推断的偏差:
import polars as pl s = pl.Series("a", [[[]], [[1, 2]]]) result = s.map_elements(lambda x: x).cast(pl.List(pl.List(pl.Int64))) print(result)
方案2:创建序列时直接指定类型
在初始化Series阶段就明确嵌套列表的元素类型,后续的map_elements操作会直接保留正确的类型:
import polars as pl s = pl.Series("a", [[[]], [[1, 2]]], dtype=pl.List(pl.List(pl.Int64))) result = s.map_elements(lambda x: x) print(result)
两种方案都能得到预期结果,优先推荐方案2,从源头固定类型可以避免后续操作出现类型偏差。
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

