检查多个列中是否只有一列是NaN,然后分配0



我想检查以下数据帧是否有多个值为空,然后根据该条件为文档类型列分配一个0:

Document Type                          Totaal  Factuurdatum
--  -----------------------------------  --------  --------------
0  0                                         nan     nan
21  IngramMicro.AccountsPayable.Invoice    562.65  2021-03-16

我在一个专栏中使用以下工作代码:

df.loc[df['Totaal'] == 'NaN', 'Document Type'] = 0

但是,无法检查列列表中的一列是否为nan,然后分配0。。因此,这导致更频繁地分配0。

期望输出:

Document Type                          Totaal  Factuurdatum
--  -----------------------------------  --------  --------------
0  0                                         nan     nan
21  0                                       562.65    nan

如果列列表中至少有一个值匹配,我认为您需要DataFrame.any进行测试,如果所有值匹配,则需要DataFrame.all进行测试:

cols = ['Totaal','Factuurdatum']
df.loc[(df[cols] == 'NaN').any(axis=1), 'Document Type'] = 0
#laternative for test NaN and nan strings
df.loc[(df[cols].isin(['NaN', 'nan']).any(axis=1), 'Document Type'] = 0

如果NaN缺少值:

cols = ['Totaal','Factuurdatum']
df.loc[df[cols].isna().any(axis=1), 'Document Type'] = 0

最新更新