首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除numpy数组中的所有非字符串值

删除numpy数组中的所有非字符串值
EN

Stack Overflow用户
提问于 2019-06-05 03:36:56
回答 1查看 222关注 0票数 0

我有一个只有str和NaN值的数组数组,比如:

代码语言:javascript
复制
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值为浮点型。

代码语言:javascript
复制
type(x[0][3])
out: float

谢谢你的预估

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 04:00:06

您有一个具有形状(3,)和4个字段的recarray:

代码语言:javascript
复制
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)

你不能把它弄得一团糟。

但是你可以把它变成一个二维数组,然后做一个列表理解:

代码语言:javascript
复制
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']]

我们还可以对结构化数组的元素进行理解:

代码语言:javascript
复制
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 (复合数据类型记录),但它像元组一样迭代。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56450265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档