python - 如果列中的所有值都超出某个范围,则删除该列
问题描述
数据样本:
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().
解决方案
你的整体逻辑是正确的;问题是运算符优先级。按位运算的优先级高于“大于”,所以你的表达不是你想的那样。
您确实正确应用了德摩根定理;您只需要通过使用括号强制您想要的运算符优先级来修复您的表达式:
df.loc[:, ((df > 9) & (df < 40)).any(axis=0)]
推荐阅读
- macos - Apple Script Keynote 自动循环
- flutter - 如何在颤振中导出/导入 typedef
- microsoft-graph-api - MS Graph 401 .. 以令牌声明?
- docker-compose - docker-compose up 命令设置了两次环境变量
- javascript - 错误:不匹配的匿名定义()模块 Magento 2.3
- javascript - 为什么不在窗口对象上定义 const 和 let 语句
- isabelle - Isabelle/Isar 中的仿函子构造
- php - PHP PDO DB 连接未知字符集
- c# - 使用 lambda 谓词比较两个列表以确定两个列表是否包含相同的项目
- python - Django 2.1 - 检查答案是否正确并返回反馈