Python 删除';楠';或者,如果数组在从pandas转换为numpy后包含nan,则减少numpy数组的长度
我想从numpy数组中删除Python 删除';楠';或者,如果数组在从pandas转换为numpy后包含nan,则减少numpy数组的长度,python,arrays,numpy,Python,Arrays,Numpy,我想从numpy数组中删除nan。假设我的numpy数组包含: np_array = ["123","pqr","123",nan,"avb", nan] 预期产出: ["123","pqr","123","avb"] 如果我们在pandas中使用pandas.dropna()执行此操作,它将删除我不想执行的整行。我只想删除该值并减小数组大小 有什么可能的方法吗?isnan()应该可以。关于如何操作的示例: >>> import numpy as np >>&g
nan
。假设我的numpy数组包含:
np_array = ["123","pqr","123",nan,"avb", nan]
预期产出:
["123","pqr","123","avb"]
如果我们在pandas中使用pandas.dropna()
执行此操作,它将删除我不想执行的整行。我只想删除该值并减小数组大小
有什么可能的方法吗?isnan()
应该可以。关于如何操作的示例:
>>> import numpy as np
>>> np_array = np.array([1,2,3,np.nan,4])
>>> np_array
array([ 1., 2., 3., nan, 4.])
>>> np_array = np_array[~np.isnan(np_array)]
>>> np_array
array([ 1., 2., 3., 4.])
试试这个
np_clean = [x for x in np_array if str(x) != 'nan']
它将从列表中删除nan您不能使用
np。isnan
,因为nan
是数组中的字符串,但您可以通过与字符串比较使用布尔索引:“nan”
:
>>将numpy作为np导入
>>>np_array=np.array([“123”、“pqr”、“123”、np.nan、“avb”、np.nan])
>>>np_数组[np_数组!='nan']
数组(['1234','pqr','123','avb'],
dtype='这适用于数值数组
filter(lambda x: np.isfinite(x), np.array([1,2,3,np.nan]))
>>>[1.0, 2.0, 3.0]
不工作:错误:**TypeError:ufunc'isnan'不支持输入类型,并且输入规则“安全”其数据类型为object检查数组的dtype
。isnan
为对象数组引发该错误。如果没有理由使用对象数组,则可以执行arr.dtype=np.float64
或其他操作您需要,然后isnan
将起作用。如果确实需要对象,请使用上面的MSeifert答案。这些建议的副本仅适用于数字数组(因此它们不是真正的副本)!我假设您也不想删除行?您看过pandas.fillna()吗?一般来说,如果一行被视为观察值,我们将尝试保留整行,而不仅仅是删除行中的nan值。
filter(lambda x: np.isfinite(x), np.array([1,2,3,np.nan]))
>>>[1.0, 2.0, 3.0]