如何在Polars中筛选或排除嵌套类型列?
解决Polars筛选/排除嵌套类型列的问题
你原来的方法行不通是因为Polars的选择器需要匹配具体的dtype实例(比如pl.List(pl.Int64)),而不是类型类(比如pl.List),直接传类会生成空的dtype模板,根本匹配不到任何列。下面是两种可行的解决方案:
方法1:自定义选择器函数
通过判断列的dtype实例类型,筛选出非嵌套列:
import polars as pl # 定义嵌套类型判断逻辑 def is_nested(dtype): return isinstance(dtype, (pl.List, pl.Array, pl.Struct, pl.Object)) # 创建选择器:筛选所有非嵌套类型列 non_nested_selector = pl.selectors.select_if(lambda col: not is_nested(col.dtype)) # 测试用例 df = pl.DataFrame({ "id": [1, 3, 2], "nested_list": [[1,2], [3,4], [5,6]], "nested_struct": [{"a":1}, {"a":3}, {"a":2}], "value": [10, 30, 20] }) # 仅对非嵌套列排序 sorted_df = df.sort(non_nested_selector) print(sorted_df)
方法2:直接遍历列筛选
如果不想用选择器,也可以直接遍历列名筛选:
import polars as pl df = pl.DataFrame({ "id": [1, 3, 2], "nested_list": [[1,2], [3,4], [5,6]], "nested_struct": [{"a":1}, {"a":3}, {"a":2}], "value": [10, 30, 20] }) # 筛选非嵌套列名 non_nested_cols = [col for col in df.columns if not isinstance(df[col].dtype, (pl.List, pl.Array, pl.Struct, pl.Object))] # 排序 sorted_df = df.sort(non_nested_cols) print(sorted_df)
两种方法都能精准避开嵌套类型列,让sort()这类不支持嵌套类型的操作正常执行。
内容的提问来源于stack exchange,提问作者Gregg Lind
相关产品推荐
相关产品推荐

