问题描述
这是东西,我有一个名为df的数据框,看起来像这样:
id value
NaN 10
NaN 0
ATT 0
ARS 0
ABB 10
我想排除id缺失且值等于零的所有行。
我想要这个:
id value
NaN 10
ATT 0
ARS 0
ABB 10
我尝试过:
df[pd.isna(df['id']) & df['value']==0]
但是它不起作用,并且排除了超出要求的行。
解决方法
您需要更改(反转逻辑)-选择没有NaN
或没有0
的所有行,这也是因为优先级运算符为第二个条件添加了()
:
df = df[df['id'].notna() | (df['value']!=0)]
print (df)
id value
0 NaN 10
2 ATT 0
3 ARS 0
4 ABB 10
或使用Series.ne
,则不必使用()
:
df = df[df['id'].notna() | df['value'].ne(0)]
print (df)
id value
0 NaN 10
2 ATT 0
3 ARS 0
4 ABB 10
或者可以反转原始蒙版:
df = df[~(df['id'].isna() & (df['value']==0))]
print (df)
id value
0 NaN 10
2 ATT 0
3 ARS 0
4 ABB 10