You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除方差处于指定容差区间内的Pandas DataFrame列

Pandas按指定方差区间删除列的实现方案

报错原因

你遇到的报错是因为Pandas不支持0 < df.std() < 0.0001这种链式比较写法:Python的链式比较底层依赖and逻辑运算符,而df.std()/df.var()返回的是Series对象,Pandas规定不能直接对Series使用and/or这类原生逻辑运算符,因此抛出值错误。

正确实现代码

你可以通过位运算符生成过滤掩码实现需求,同时支持自动保留非数值类型的列:

import pandas as pd

# 示例DataFrame构造
d={'month': ['01/01/2020', '01/02/2020', '01/03/2020', '01/01/2020', '01/02/2020', '01/03/2020'], 
   'country': ['Japan', 'Japan', 'Japan', 'Poland', 'Poland', 'Poland'], 
   'level':['A01', 'A01', 'A01', 'A00','A00', 'A00'],
   'job title':['Insights Manager', 'Insights Manager', 'Insights Manager', 'Sales Director', 'Sales Director', 'Sales Director'],
   'number':[0, 0.001, 0, 0, 0, 0],
   'age':[24, 22, 45, 38, 60, 32]}
df=pd.DataFrame(d)

# 定义方差过滤区间
var_low = 0
var_high = 0.0001

# 计算所有列的方差,非数值列的方差结果为NaN,填充为大于阈值的数值以默认保留
col_var = df.var(numeric_only=False).fillna(var_high + 1)

# 生成保留列的掩码:取反掉方差落在指定区间的列
keep_col_mask = ~((col_var >= var_low) & (col_var <= var_high))

# 筛选得到最终DataFrame
df = df.loc[:, keep_col_mask]

执行效果

运行后会自动删除方差在0~0.0001区间的number列,保留其余所有非数值列和方差符合要求的age列。


内容的提问来源于stack exchange,提问作者AlSub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:09:02