我正在通过一个熊猫演示,我正在尝试将一串邮政编码的numpy数组排序为字符串,但是当我尝试np.ndarray.sort()时,该数组中有一个nan值给了我和错误
这是我正在关注的演示(在[48]中):http://nbviewer.jupyter.org/github/jvns/pandas-cookbook/blob/v0.2/cookbook/Chapter%207%20-%20Cleaning%20up%20messy%20data.ipynb
以下是示例值(这些值从实际演示示例中被截断了)
>>>print(unique_zips)
['11432' '11378' '10032' '10023' '10027' '11372' '11419' '11417' '10011'
nan '10033' '11216' '10016' '10305' '10312' '10026' '10309' '10036']
这是错误
>>>print(unique_zips.sort())
TypeError: unorderable types: float() < str()
我发现可以通过对列表进行如下排序来解决此问题:
unique_zips = requests['Incident Zip'].sort_values().unique()
print(unique_zips)
out:
['00083', ... '92123', nan]
但是如果我这样做,我会收到错误消息
unique_zips = requests['Incident Zip'].unique()
print(unique_zips.sort())
out:
TypeError: unorderable types: float() < str()
我检查了nan的类型,它是一个'float',解释了错误float() 我的解决方案是可以的,但是我想了解为什么numpy数组中的nan不能让我对数组进行排序。我不喜欢在调用unique()之前必须对值进行排序的方式。这可能会比较慢并且也不理想,因为我希望我的结果与我正在关注的演示相匹配。 排序numpy数组以处理nan时是否可以设置标志?
答案 0 :(得分:0)
这应该根据数值对原始数组进行排序,并忽略numpy.nan
。
import numpy as np
arr = np.array(['11432', '11378', '10032', '10023', '10027', '11372', '11419',
'11417', '10011', np.nan, '10033', '11216', '10016', '10305',
'10312', '10026', '10309', '10036'])
arr = np.sort(arr[~np.isnan(arr.astype(float))])
这在熊猫列(Series
)上也应该可以正常工作。
tilda(~
)否定条件,并根据条件“不为真”进行过滤。但是,您首先不应该真正拥有混合类型的数组。为什么您大部分都是字符串和NaN
? NumPy的矢量化功能都无法在这种阵列上工作。这个特定的过滤器之所以有效,是因为您的每个字符串都可以转换为float
类型,作为混合数据的公分母。结果仍然是字符串类型。