查找两列都为NaN的观测值,并在DataFram中将其替换为0

2024-04-25 12:05:00 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个数据帧

    a    b    c   d

    nan  nan  3   5
    nan  1    2   3
    1    nan  4   5
    2    3    7   9
    nan  nan  2   3

我想将“a”列和“b”列中的观察值都替换为0,其中“a”列和“b”列中的第2行和第5行都有NaN,因此我只想将那些匹配NaN列中的行替换为0。你知道吗

所以我的输出必须是

    a    b    c   d

    0    0    3   5
    nan  1    2   3
    1    nan  4   5
    2    3    7   9
    0    0    2   3

Tags: 数据nan
2条回答

您可以根据a/b列上的条件创建布尔序列,然后使用loc修改相应的列和行:

df.loc[df[['a','b']].isnull().all(1), ['a','b']] = 0

df
#     a   b c   d
#0  0.0 0.0 3   5
#1  NaN 1.0 2   3
#2  1.0 NaN 4   5
#3  2.0 3.0 7   9
#4  0.0 0.0 2   3

或:

df.loc[df.a.isnull() & df.b.isnull(), ['a','b']] = 0

熊猫可能有一个更简单的内置功能,但这个应该可以工作。你知道吗

df[['a', 'b']] = df.ix[ (np.isnan(df.a)) & (np.isnan(df.b)), ['a', 'b'] ].fillna(0)

实际上,@Psidom的解决方案更容易阅读。你知道吗

相关问题 更多 >