gpt4 book ai didi

python - 将 pandas DataFrame 中的对角三角形设置为 NaN

转载 作者:太空狗 更新时间:2023-10-30 02:02:32 26 4
gpt4 key购买 nike

给定以下数据框:

import pandas as pd
import numpy as np
a = np.arange(16).reshape(4, 4)
df = pd.DataFrame(data=a, columns=['a','b','c','d'])

我想产生以下结果:

df([[ NaN,  1,  2,  3],
[ NaN, NaN, 6, 7],
[ NaN, NaN, NaN, 11],
[ NaN, NaN, NaN, NaN]])

到目前为止,我已经尝试使用 np.tril_indicies,但它只适用于将 df 变回 numpy 数组,并且它只适用于整数赋值(不适用于 np.nan):

il1 = np.tril_indices(4)
a[il1] = 0

给出:

array([[ 0,  1,  2,  3],
[ 0, 0, 6, 7],
[ 0, 0, 0, 11],
[ 0, 0, 0, 0]])

...这几乎是我要找的东西,但在分配 NaN 时感到厌恶:

ValueError: cannot convert float NaN to integer

同时:

df[il1] = 0

给出:

TypeError: unhashable type: 'numpy.ndarray'

所以如果我想用 NaN 填充数据框的底部三角形,它 1) 必须是一个 numpy 数组,还是我可以直接用 pandas 来做? 2) 有没有办法用 NaN 填充底部三角形,而不是使用 numpy.fill_diagonal 并在整个 DataFrame 中逐行递增偏移量?

另一个失败的解决方案:用零填充 np 数组的对角线,然后屏蔽零并重新分配给 np.nan。它将对角线上的零值转换为 NaN,而它们应该保留为零!

最佳答案

您需要转换为float a,因为NaNtypefloat:

import numpy as np
a = np.arange(16).reshape(4, 4).astype(float)
print (a)
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]
[ 12. 13. 14. 15.]]


il1 = np.tril_indices(4)
a[il1] = np.nan
print (a)
[[ nan 1. 2. 3.]
[ nan nan 6. 7.]
[ nan nan nan 11.]
[ nan nan nan nan]]

df = pd.DataFrame(data=a, columns=['a','b','c','d'])
print (df)
a b c d
0 NaN 1.0 2.0 3.0
1 NaN NaN 6.0 7.0
2 NaN NaN NaN 11.0
3 NaN NaN NaN NaN

关于python - 将 pandas DataFrame 中的对角三角形设置为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40690854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com