Pandas 如何筛选同一列中的 Null 值和零值
Pandas How to filter on Null values and zero values in the same column
我一直在尝试修复此语法,但没有成功。如果有人能帮助我,我将不胜感激。
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% 不起作用。否则,整个代码可以完美运行,但我如何连接第一行和第二行?
您可以通过两种方法解决此问题:
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。
空dataframe的原因确实是前两个条件,列Sum of VAT
不能同时为null和0,所以&
条件应该换成|
作为 -
vat.loc[((vat['Sum of VAT'].isnull()) | (vat['Sum of VAT'] == 0)) &
(vat['Comment'] == 'Transactions 0DKK') &
(vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
或
使用 isin
作为 -
vat.loc[(vat['Sum of VAT'].isin([np.nan, 0])) &
(vat['Comment'] == 'Transactions 0DKK') &
(vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
我一直在尝试修复此语法,但没有成功。如果有人能帮助我,我将不胜感激。
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% 不起作用。否则,整个代码可以完美运行,但我如何连接第一行和第二行?
您可以通过两种方法解决此问题:
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。
空dataframe的原因确实是前两个条件,列Sum of VAT
不能同时为null和0,所以&
条件应该换成|
作为 -
vat.loc[((vat['Sum of VAT'].isnull()) | (vat['Sum of VAT'] == 0)) &
(vat['Comment'] == 'Transactions 0DKK') &
(vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'
或
使用 isin
作为 -
vat.loc[(vat['Sum of VAT'].isin([np.nan, 0])) &
(vat['Comment'] == 'Transactions 0DKK') &
(vat['Memo (Main)'] != '- None -'), 'Comment'] = 'Travel bill'