我试图用-9999.0替换numpy数组中的所有None和/或nan值,然后将所有数组值除以1000.我的所有尝试都遇到错误,TypeError:只有length-1数组可以转换为Python标量。请帮忙。
__init__.py
答案 0 :(得分:1)
由于您的stats
数组显然包含NaN
和None
值,因此您的数组dtype将为np.object
。可能最简单的方法是迭代数组并创建一个新数组,替换进程中的值。例如:
>>> stats = [1, 2, 3, np.nan, None, 6]
>>> a = np.array([-9999 if x is None or np.isnan(x) else x for x in stats])
>>> a
array([ 1, 2, 3, -9999, -9999, 6])
更简单,您可以将dtype设置为np.float
,这会隐式地将None
转换为np.nan
:
>>> stats = np.array(stats, dtype=np.float)
>>> stats[np.isnan(stats)] = -9999
但您可能需要考虑使用masked arrays代替:
>>> stats = [1, 2, 3, np.nan, None, 6]
>>> stats = np.array(stats, dtype=np.float)
>>> stats
array([ 1., 2., 3., nan, nan, 6.])
>>> a = np.ma.array(stats, mask=np.isnan(stats), fill_value=-9999)
>>> a / 1000
masked_array(data = data = [0.001 0.002 0.003 -- -- 0.006],
mask = [False False False True True, False],
fill_value = -9999.0)
答案 1 :(得分:1)
此代码在数组中查找非浮点数(在本例中为None)的所有值,并将它们替换为-9999。最后一步是将所有内容除以1000:
array = np.array([None, 1.1, 2.1, 3.3, 4.5, None, 5.1, 6.0])
idxs = np.where([type(val) != float for val in array])[0]
array[idxs] = -9999
array = array/1000
我相信您可以根据自己的需求调整此解决方案。