Python:使用NaN对数组进行排序

用户名

注意:我正在使用Python和numpy数组。

我有很多都有两列和多行的数组。第二列中有一些NaN值;第一列只有数字。

我想根据第二列以升序对每个数组进行排序,而忽略了NaN值。这是一个很大的数据集,因此我宁愿不必将NaN值转换为零或其他值。

我想要这样排序:

105.  4.
22.   10.
104.  26.
...
...
...
53.   520.
745.  902.
184.  nan
19.   nan

首先,我尝试使用fix_invalid它将NaN转换为1x10^20

#data.txt has one of the arrays with 2 columns and a bunch of rows.
Data_0_30 = array(genfromtxt(fname='data.txt'))

g = open("iblah.txt", "a") #saves to file

def Sorted_i_M_W(mass):
    masked = ma.fix_invalid(mass)
    print  >> g, array(sorted(masked, key=itemgetter(1)))

Sorted_i_M_W(Data_0_30)

g.close()

或者我将函数替换为如下形式:

def Sorted_i_M_W(mass):
    sortedmass = sorted( mass, key=itemgetter(1))
    print  >> g, array(sortedmass)

对于每次尝试,我都会得到类似以下内容:

...
[  4.46800000e+03   1.61472200e+11]
[  3.72700000e+03   1.74166300e+11]
[  4.91800000e+03   1.75502300e+11]
[  6.43500000e+03              nan]
[  3.95520000e+04   8.38907500e+09]
[  3.63750000e+04   1.27625700e+10]
[  2.08810000e+04   1.28578500e+10]
...

在NaN值所在的位置,重新开始排序。

(对于fix_invalid上面摘录中的NaN,显示一个1.00000000e+20值)。但我希望排序完全忽略NaN值。

用我想要的方式对数组进行排序的最简单方法是什么?

不知道是否可以使用完成此操作numpy.sort,但是您可以确定使用numpy.argsort

>>> arr
array([[ 105.,    4.],
       [  53.,  520.],
       [ 745.,  902.],
       [  19.,   nan],
       [ 184.,   nan],
       [  22.,   10.],
       [ 104.,   26.]])
>>> arr[np.argsort(arr[:,1])]
array([[ 105.,    4.],
       [  22.,   10.],
       [ 104.,   26.],
       [  53.,  520.],
       [ 745.,  902.],
       [  19.,   nan],
       [ 184.,   nan]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章