按数组过滤 numpy

3

我希望能够通过另一个我已经收集到的数组(具有相同的值)来过滤我的ndarray。

我的主要ndarray看起来像

[['Name' 'Col1' 'Count']
 ['test' '' '413']
 ['erd' ' ' '60']
 ..., 
 ['Td1' 'f' '904']
 ['Td2' 'K' '953']
 ['Td3' 'r' '111']]

我有另一个列表,里面有各种匹配的名称。
names = ['Td1','test','erd']

我想做什么

我想使用列表名称来筛选上面的ndarray(多维数组)?

我尝试了什么

name_filter = main_ndarray[:,0] == names

这并不起作用

我的期望

[['Name' 'Col1' 'Count']
 ['test' '' '413']
 ['erd' ' ' '60']
 ['Td1' 'f' '904']]
3个回答

3
考虑使用Pandas处理这种数据:
import pandas as pd

data = [['Name', 'Col1', 'Count'],
        ['test', '', '413'],
        ['erd', ' ', '60'],
        ['Td1', 'f', '904'],
        ['Td2', 'K', '953'],
        ['Td3', 'r', '111']]

df = pd.DataFrame(data[1:], columns=data[0])
names = ['Td1','test','erd']
result = df[df.Name.isin(names)]

结果:

>>> df
   Name Col1 Count
0  test        413
1   erd         60
2   Td1    f   904
3   Td2    K   953
4   Td3    r   111
>>> result
   Name Col1 Count
0  test        413
1   erd         60
2   Td1    f   904
>>>

参考文献


1
你也可以使用 filter 函数。
cats_array = numpy.array(
 [['Name' ,'Col1', 'Count'],
 ['test', '' ,'413'],
 ['erd' ,' ' ,'60'],
 ['Td1' ,'f' ,'904'],
 ['Td2' ,'K' ,'953'],
 ['Td3' ,'r', '111']]
 )

 names = ['Td1','test','erd']

 filter(lambda x: x[0] in names, cats_array)

给出:
[array(['test', '', '413'],
       dtype='|S5'), array(['erd', ' ', '60'],
       dtype='|S5'), array(['Td1', 'f', '904'],
       dtype='|S5')]

那么出于好奇,我现在该如何处理这个数组呢?它似乎没有保留“常规”的格式。现在它里面有这个dtype,而索引1中的值与连续的数组完全不同。 - cat
1
@cat,你可以用map(lambda a: list(a), filter(lambda x: x[0] in names, cats_array))来保持列表格式。如果你这样做,你的答案将是[['test', '', '413'], ['erd', ' ', '60'], ['Td1', 'f', '904']] - Nitish

1

我也会选择 @YXD 的 Pandas 解决方案,但为了完整性,我还提供了一种基于列表推导的简单解决方案:

data = [['Name', 'Col1', 'Count'],
 ['test', '', '413'],
 ['erd', ' ', '60'],
 ['Td1', 'f', '904'],
 ['Td2', 'K', '953'],
 ['Td3', 'r', '111']]

names = ['Td1', 'test', 'erd']

# select all sublist of data
res = [l for l in data if l[0] in names]

# insert the first row of data
res.insert(0, data[0]) 

然后它会给您所需的输出:

[['Name', 'Col1', 'Count'],
 ['test', '', '413'],
 ['erd', ' ', '60'],
 ['Td1', 'f', '904']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接