python - 在python中删除带有条件的CSV行
问题描述
我有一个 csv 文件,其中包含以下内容:
storeNumber, sale1, sale2
1, 1, 1
2, 0, 0
3, 1, 0
4, 0, 1
...
25, 0, 0
26, 1, 0
27, 0, 1
28, 0,0
我需要删除 sale1 和 sale2 等于 0 的行。
我有以下代码设置:
import pandas as pd
df = pd.read_csv('sales.csv', index_col=0)
df_new = df[df.sale1 != 0] and df[df.sale2 != 0]
print(df_new)
如果我只删除具有 0 值的每一列中的一列,则该代码有效。
df_new = df[df.sale1 != 0]
或者
df_new = df[df.sale2 != 0]
但是,当将上面的代码与“and”放在一起时,我收到一条错误消息:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
删除 sale1 和 sale2 的值为 0 的行的正确代码是什么?
解决方案
要运算符,您需要使用组合两个逻辑条件 is&
而不是and
. 这在这里详细解释。所以,你需要的是:
df_new = df[(df.sale1 != 0) & (df[df.sale2 != 0)]
请注意,两个条件都必须在括号中,因为&
绑定强于!=
.
推荐阅读
- wpf - 相对源路径问题
- python - 如何制作为用户提供角色的 Discord 机器人命令?
- multithreading - lock cmpxchg 无法按核心顺序执行线程
- javascript - ApexCharts 数据未正确呈现
- c# - Grpc.Core.Channel 和 Grpc.Net.Client.GrpcChannel 有什么区别?
- jestjs - 澄清嵌套模块中的玩笑行为
- react-native - React Native onScrollBeginDrag 对滚动不是很敏感
- java - Javafx、Maven、Hibernate、无法在第 0 行和第 0 列执行解组
- sass - 萨斯-MQ。SassError:函数在没有@return 的情况下完成
- heroku - Heroku / Devops:我需要在亚洲为我的中国用户提供额外的服务器实例吗?