在python中删除带有条件的CSV行

在python中删除带有条件的CSV行,python,pandas,dataframe,delete-row,Python,Pandas,Dataframe,Delete Row,我有一个包含以下内容的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.s

我有一个包含以下内容的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]

然而,当把上面的代码加上“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的行的正确代码是什么?

对于运算符,您需要使用
&
来组合这两个逻辑条件,而不是
。对此进行了详细解释。因此,您需要的是:

df_new = df[(df.sale1 != 0) & (df[df.sale2 != 0)]  

请注意,这两个条件都必须放在括号中,因为
&
绑定比
强=

另一种编写方法是只保留两列中任何一列不等于零的行

df.loc[df[['KC_1','KC_2']].ne(0).any(axis=1)]

确保代码没有输入错误:在使用
的示例中,您在语句的两侧使用
df.KC_2
df.loc[df[['KC_1','KC_2']].ne(0).any(axis=1)]