我有一个只有str和NaN值的数组数组,比如:
x = numpy.recarray(
[('A', 'B', nan, nan),
('B', nan, nan, nan),
('A', 'B', 'H', 'Z')],
dtype=[('D1', 'O'), ('D2', 'O'),
('D3', 'O'), ('D4', 'O')])
我正在寻找一种有效的方法来删除所有的NaN值,并使用元素数量可变的数组。nan值为浮点型。
type(x[0][3])
out: float
谢谢你的预估
发布于 2019-06-05 04:00:06
您有一个具有形状(3,)和4个字段的recarray:
In [85]: x = np.array(
...: [('A', 'B', np.nan, np.nan),
...: ('B', np.nan, np.nan, np.nan),
...: ('A', 'B', 'H', 'Z')],
...: dtype=[('D1', 'O'), ('D2', 'O'),
...: ('D3', 'O'), ('D4', 'O')])
In [86]: x
Out[86]:
array([('A', 'B', nan, nan), ('B', nan, nan, nan), ('A', 'B', 'H', 'Z')],
dtype=[('D1', 'O'), ('D2', 'O'), ('D3', 'O'), ('D4', 'O')])
In [87]: x.shape
Out[87]: (3,)
In [88]: x['D1']
Out[88]: array(['A', 'B', 'A'], dtype=object)
In [89]: x['D3']
Out[89]: array([nan, nan, 'H'], dtype=object)
你不能把它弄得一团糟。
但是你可以把它变成一个二维数组,然后做一个列表理解:
In [93]: xx = np.array(x.tolist())
In [94]: xx
Out[94]:
array([['A', 'B', 'nan', 'nan'],
['B', 'nan', 'nan', 'nan'],
['A', 'B', 'H', 'Z']], dtype='<U3')
In [95]: [[i for i in row if i!='nan'] for row in xx]
Out[95]: [['A', 'B'], ['B'], ['A', 'B', 'H', 'Z']]
我们还可以对结构化数组的元素进行理解:
In [101]: [[i for i in row if i is not np.nan] for row in x]
Out[101]: [['A', 'B'], ['B'], ['A', 'B', 'H', 'Z']]
x
的一个元素是类似元组的。从技术上讲,它是np.void
(复合数据类型记录),但它像元组一样迭代。
https://stackoverflow.com/questions/56450265
复制相似问题