加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 根据列值过滤numpy ndarray(矩阵)

发布时间:2020-12-16 23:09:22 所属栏目:Python 来源:网络整理
导读:这个问题是根据一些列值过滤NumPy ndarray. 我有一个相当大的NumPy ndarray(300000,50),我根据某些特定列中的值过滤它.我有ndtypes所以我可以按名称访问每一列. 第一列名为category_code,我需要过滤矩阵以仅返回category_code所在的行(“A”,“B”,“C”).
这个问题是根据一些列值过滤NumPy ndarray.

我有一个相当大的NumPy ndarray(300000,50),我根据某些特定列中的值过滤它.我有ndtypes所以我可以按名称访问每一列.

第一列名为category_code,我需要过滤矩阵以仅返回category_code所在的行(“A”,“B”,“C”).

结果将需要是另一个NumPy ndarray,其列仍然可以通过dtype名称访问.

这是我现在所做的:

index = numpy.asarray([row['category_code'] in ('A','B','C') for row in data])
filtered_data = data[index]

列表理解如:

list = [row for row in data if row['category_code'] in ('A','C')]
filtered_data = numpy.asarray(list)

不会起作用,因为我最初的dtypes不再可访问.

是否有更好/更多的Pythonic方法来实现相同的结果?

可能看起来像的东西:

filtered_data = data.where({'category_code': ('A','C'})

谢谢!

解决方法

您可以使用基于NumPy的库 Pandas,它具有更常用的ndarrays实现:
>>> # import the library
>>> import pandas as PD

创建一些示例数据作为python字典,其键是列名,其值是作为python列表的列值;每列一个键/值对

>>> data = {'category_code': ['D','A','C','D','A'],'value':[4,2,6,3,8,4,9]}

>>> # convert to a Pandas 'DataFrame'
>>> D = PD.DataFrame(data)

要仅返回category_code为B或C的行,从概念上讲两个步骤,但可以在一行中轻松完成:

>>> # step 1: create the index 
>>> idx = (D.category_code== 'B') | (D.category_code == 'C')

>>> # then filter the data against that index:
>>> D.ix[idx]

        category_code  value
   2             B      6
   3             C      3
   6             C      3

请注意Pandas与NumPy索引之间的区别,NumPy是构建Pandas的库.在NumPy中,您只需将索引放在括号内,指示使用“,”索引哪个维度,并使用“:”表示您希望其他维度中的所有值(列):

>>>  D[idx,:]

在Pandas中,您调用数据框的ix方法,并仅将索引放在括号内:

>>> D.loc[idx]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读