首页 > 解决方案 > 如果列中的所有值都超出某个范围,则删除该列

问题描述

数据样本:

X 是的
12 132
15 42
14 51
18 41
29 100
21 132

假设我有这样的条件:如果一列中的所有值都不在 10 和 40 之间,则删除该列。

根据这种情况,我必须删除数据样本中的y 列。尝试使用:

df.loc[:, (df >9 & df <40).any(axis=0)]

但我收到此错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

标签: pythonpandas

解决方案


你的整体逻辑是正确的;问题是运算符优先级。按位运算的优先级高于“大于”,所以你的表达不是你想的那样。

您确实正确应用了德摩根定理;您只需要通过使用括号强制您想要的运算符优先级来修复您的表达式:

df.loc[:, ((df > 9) & (df < 40)).any(axis=0)]

推荐阅读