gpt4 book ai didi

python - 在忽略缺失值的同时在python中对数组进行排名

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:52 25 4
gpt4 key购买 nike

我想在不更改数字位置的情况下对 numpy 数组进行排名。我能够使用下面的 numpy 函数来做到这一点,但它也一直对“NaN”值进行排名,我怎样才能让它忽略它们并只对实数值进行排名。任何帮助深表感谢!谢谢!

这是我的代码:

import numpy as np

hr=[]
for line in open('file.txt' ,'r'):
hr.append(line.strip().split('\t'))

tf=[]
for i in range(1,len(hr)):
print hr[i][1:13]
tf.append(hr[i][1:13])

for rows in range(0,len(tf)):
array = np.array([tf[rows]],dtype(float))
print array
order = array.argsort()
ranks = order.argsort()
print ranks

在这里,每个数组行都是来自 tf 的类似内容:

array=['NaN', '20', '383.333', 'NaN', 'NaN', 'NaN', '5', '100', '129', '122.5', ' NaN', 'NaN']

期望的输出:

ranks=array['NaN', 1, 5, 'NaN', 'NaN', 'NaN', 0, 2, 4, 3, 'NaN', 'NaN']

上面代码的实际输出:

ranks=array([ 6, 3, 4, 7, 8, 9, 5, 0, 2, 1, 10, 11])

我是 python 的新手,所以非常感谢任何帮助!

最佳答案

如果你有 scipy,mstats.rankdata基本上做你想做的:

import scipy.stats.mstats as mstats
import numpy as np

array = np.array(map(float, ['NaN', '20', '383.333', 'NaN', 'NaN', 'NaN', '5', '100', '129', '122.5', 'NaN', 'NaN']))

np.ma.masked_invalid 屏蔽 nan 值。 mstats.rankdata 对非屏蔽值进行排序,并将 0 分配给屏蔽值。

ranks = mstats.rankdata(np.ma.masked_invalid(array))
print(ranks)
# [ 0. 2. 6. 0. 0. 0. 1. 3. 5. 4. 0. 0.]

现在我们稍微修饰一下以获得所需的输出:

ranks[ranks == 0] = np.nan
ranks -= 1
print(ranks)
# [ nan 1. 5. nan nan nan 0. 2. 4. 3. nan nan]

关于python - 在忽略缺失值的同时在python中对数组进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12519866/

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