Pandas如何过滤同一列中的Null值和零值

问题描述 投票:0回答:2

我一直在尝试修复此语法,但是没有运气。如果有人可以帮助我,我将不胜感激。

1    vat.loc[(vat['Sum of VAT'].isnull()) &
2            (vat['Sum of VAT'] == 0) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
5    vat[vat["Comment"] == "Travel bill"]

问题出在第一和第二行。我得到一个空的数据帧作为输出,这是因为同一列中的空值和零(0)值的过滤器不会同时发生。有没有更好的方法来组合第1行和第2行,以便获得所需的输出。如果我删除第一行或第二行,我会得到一个输出,但这不是理想的输出。我尝试使用isin()方法,但对我100%无效。否则,整个代码将完美运行,但是如何将第一行和第二行连接起来?谢谢!

python-3.x pandas isnull loc isin
2个回答
0
投票

有两种方法可以解决此问题:

a)您可以用NaN替换零,然后可以进一步过滤NULL值。所以我的意思是说,做类似的事情>

vat['Sum of VAT'] = vat['Sum of VAT'].replace(0, np.nan)
1 vat.loc[(vat['Sum of VAT'].isnull()) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'

b)或者,您可以简单地使用isin方法:

1 vat.loc[(vat['Sum of VAT'].isin(0, np.nan)) &
3            (vat['Comment'] == 'Transactions 0DKK') &
4            (vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'

通过使用以上两个方法中的任何一个,您都可以从代码中忽略L#2。


0
投票

数据帧为空的原因确实是前两个条件,列Sum of VAT不能同时为null和0,因此&条件应该用|替换为-

© www.soinside.com 2019 - 2024. All rights reserved.