python C 根据列值过滤numpy ndarray(矩阵)
我有一个相当大的NumPy ndarray(300000,50),我根据某些特定列中的值过滤它.我有ndtypes所以我可以按名称访问每一列.
第一列名为category_
|
这个问题是根据一些列值过滤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](编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 从python 2.4输入重定向运行shell命令?
- python – 关于Pandas Dataframe的Kurtosis doent工作
- python – 用于打开具有两个函数的文件的“with”语法
- python – 创建对角稀疏矩阵的有效方法
- python – 如何在seaborn的facetgrid中设置可读的xticks?
- python C 你如何从雅虎财经中提取每周的历史数据?
- python-2.7 – Sphinx的LaTeX错误:找不到文件`titlesec.st
- python进阶教程之函数对象(函数也是对象)
- python – PEP 8和列表理解
- django – formfield_for_foreignkey和内联管理员
