Python 用nan轻松替换np数组的0值
原则上,np数组似乎可以保存nan值,但它不希望在初始分配后将其写入?有谁能解释一下这一点,并提出一种比我在示例5中的方法更简单的替换方法吗Python 用nan轻松替换np数组的0值,python,numpy,nan,Python,Numpy,Nan,原则上,np数组似乎可以保存nan值,但它不希望在初始分配后将其写入?有谁能解释一下这一点,并提出一种比我在示例5中的方法更简单的替换方法吗 import numpy as np a = np.array([2,1,0,7]) a[a==0] = -999 # replacing this way with numbers works print (a) a = np.array([2,1,np.nan,7]) # allocating an np array with nans wor
import numpy as np
a = np.array([2,1,0,7])
a[a==0] = -999 # replacing this way with numbers works
print (a)
a = np.array([2,1,np.nan,7]) # allocating an np array with nans works
print (a)
a = np.array([2,1,0,7])
a[a==0] = np.nan # trying the frist approach with nan instead of a number gives ValueError: cannot convert float NaN to integer
a = np.array([2,1,0,7])
a[2] = np.nan # also writing to one specific position does not work: ValueError: cannot convert float NaN to integer
print (a)
# works - but this cant be the way to do it normally?
a = np.array([2,1,0,7])
a = list(a)
for idx, elem in enumerate(a):
if elem == 0:
a[idx] = np.nan
a = np.array(a)
print(a)
整数没有NaN值np.nan
是一个浮点,不能放在整数数组中
roganjosh击败了我,找到了解决方案:p(即,在尝试将np.nan
放入其中之前,先转换为浮点数组)。经roganjosh许可:
a = np.array([2,1,0,7])
a = a.astype(np.float64)
a[a == 0] = np.nan
a
# => array([ 2., 1., nan, 7.])
转换为list
有效的原因是,与numpy数组不同,list不介意混合元素类型。当您重新转换整数和浮点的混合列表时,numpy将假定您需要一个浮点数组
整数没有NaN值np.nan
是一个浮点,不能放在整数数组中
roganjosh击败了我,找到了解决方案:p(即,在尝试将np.nan
放入其中之前,先转换为浮点数组)。经roganjosh许可:
a = np.array([2,1,0,7])
a = a.astype(np.float64)
a[a == 0] = np.nan
a
# => array([ 2., 1., nan, 7.])
转换为
list
有效的原因是,与numpy数组不同,list不介意混合元素类型。当您重新转换整数和浮点的混合列表时,numpy将假定您需要浮点数组。如注释中所述,问题是a的类型为int
,而np.nan
的类型为float,因此它不能直接赋值,也不能强制转换为int,因为它只为浮点类型定义
要使切片分配正常工作,您必须初始化一个浮点数组:
a = np.array([2,1,0,7], dtype=float)
a[a==0] = np.nan
print(a)
# array([ 2., 1., nan, 7.])
如注释中所述,问题在于a的类型为
int
,而np.nan
的类型为float,因此不能直接赋值或强制转换为int,因为它仅为float类型定义
要使切片分配正常工作,您必须初始化一个浮点数组:
a = np.array([2,1,0,7], dtype=float)
a[a==0] = np.nan
print(a)
# array([ 2., 1., nan, 7.])
这个错误很明显。问题是
a
的类型为int
,而np.nan
的类型为float
,因此它不能直接赋值或强制转换为int,因为它只为float类型定义a=a.astype(np.float64);a[a==0]=np.nan
错误非常明显。问题是a
的类型为int
,而np.nan
的类型为float
,因此它不能直接赋值或强制转换为int,因为它只为float类型定义a=a.astype(np.float64);a[a==0]=np.nan
tbf,我首先用整数重复了这个错误:)只要加上你的答案,他们可能会用他们的例子侥幸逃脱,甚至更少。bf,我首先用整数重复了这个错误:)只要加上你的答案,他们可能会用自己的例子侥幸逃脱,甚至更少