考虑数据帧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] 举报,一经查实,本站将立刻删除。