微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 为什么在使用loc分配时会得到nan

考虑数据帧df

df = pd.DataFrame(np.arange(25).reshape(5, 5), list('ABCDE'), list('abcde'))
print(df)

    a   b   c   d   e
A   0   1   2   3   4
B   5   6   7   8   9
C  10  11  12  13  14
D  15  16  17  18  19
E  20  21  22  23  24

我想将行’A’中的值替换为’E’行中的相应值,其中行’D’中的值等于零mod 3

我创建了布尔掩码

mask = df.loc['D'] % 3 == 0

然后我完成了我的任务

df.loc['A'] = df.loc['E', mask]

但是,我现在在我的一些列中有np.nan,而我的整个数据帧现在都是浮点数

print(df)

      a     b     c     d     e
A  20.0   NaN   NaN  23.0   NaN
B   5.0   6.0   7.0   8.0   9.0
C  10.0  11.0  12.0  13.0  14.0
D  15.0  16.0  17.0  18.0  19.0
E  20.0  21.0  22.0  23.0  24.0  

我应该如何得到这个结果?

    a   b   c   d   e
A  20   1   2  23   4
B   5   6   7   8   9
C  10  11  12  13  14
D  15  16  17  18  19
E  20  21  22  23  24

解决方法:

在您的loc中包含“A”行而不是“E”行的掩码:

df.loc['A', mask] =  df.loc['E']

您看到NaN值的原因是您将所有行’A’重新分配为行’E’的屏蔽版本.行’E’的屏蔽版本缺少某些列的条目,因此它们会被NaN填充. NaN的dtype是float,它强制所有其他整数值为浮点数.通过在’A’行上使用遮罩,您只需要分配到要更新的位置.

结果输出

    a   b   c   d   e
A  20   1   2  23   4
B   5   6   7   8   9
C  10  11  12  13  14
D  15  16  17  18  19
E  20  21  22  23  24

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐