如何基于列内值条件过滤(排除)Polars DataFrame中的列?
解决Polars DataFrame按列标准差过滤列的问题
你当前的代码polars_df.select(cs.numeric() != 0)是对每个数值列的所有元素做"不等于0"的判断,生成的是布尔值列,这和你要筛选列的需求不符。要保留标准差大于0的列,需要先计算列的标准差,再基于结果筛选列名,具体实现方式如下:
方法一:分步实现
- 计算所有列的标准差,得到以列名为索引的Series:
std_results = polars_df.std()
- 筛选出标准差大于0的列名:
keep_columns = std_results[std_results > 0].index.to_list()
- 用筛选后的列名选择原DataFrame的列:
polars_df = polars_df.select(keep_columns)
方法二:链式简洁写法
可以把步骤合并成一行代码,更紧凑:
polars_df = polars_df.select([col for col in polars_df.columns if polars_df[col].std() > 0])
方法三:Polars风格的表达式写法
利用Polars的类型选择和动态过滤,更贴合框架设计:
import polars as pl polars_df = polars_df.select( pl.col(pl.NUMERIC_DTYPES).filter(lambda s: s.std() > 0) )
以上三种方式都能得到只保留标准差大于0的列的DataFrame。
内容的提问来源于stack exchange,提问作者yarvis
相关产品推荐
相关产品推荐

