如何使用Polars筛选所有值均不为NaN的数据列?
Polars筛选非全NaN列的解决方法
Polars没法直接套用Pandas的列筛选语法,而且pl.filter确实只负责行过滤,要筛选列可以用这两种实用方法:
方法一:用select配合列表达式直接筛选
直接在select里判断每列是否存在至少一个非空值,保留符合条件的列:
import polars as pl # 示例DataFrame df = pl.DataFrame({ "col1": [1, 2, None], "col2": [None, None, None], "col3": [3, 4, 5] }) # 筛选出非全NaN的列 filtered_df = df.select(pl.col("*").is_not_null().any())
这里pl.col("*")选中所有列,is_not_null().any()会检查每列是否有至少一个非空值,自动排除全NaN的列。
方法二:先找出全NaN列再删除
先遍历列名,判断哪些列是全NaN的,再用drop删除它们:
# 找出所有全NaN的列名 all_null_cols = [] for col in df.columns: # 判断当前列是否所有值都是NaN if df.select(col).is_null().all().item(): all_null_cols.append(col) # 删除全NaN列 filtered_df = df.drop(all_null_cols)
两种方法都能实现需求,第一种更简洁,适合直接写在一行里;第二种更直观,适合需要单独处理全NaN列名的场景。
内容的提问来源于stack exchange,提问作者Carl_christian
相关产品推荐
相关产品推荐

