我怎么能在重新组合中进行过滤

时间:2013-06-26 06:53:00

标签: python numpy

我有一个名为data.csv

的数据文件
name,value
A,10
1,20
B,30
3,20
...

所以问题是我使用numpy和mlab加载这个csvfile

data = mlab.csv2rec(data.csv) 

我有一个问题,如何过滤掉data.name is a number

例如:输出应为

1,20
3,20

2 个答案:

答案 0 :(得分:4)

如果要在保留过滤记录的结构的同时过滤重新排列:

filter_idx = [i for i, s in enumerate(data.names) if s.isdigit()]
data[filter_idx]

给出

rec.array([('1', 20), ('3', 20)], 
      dtype=[('names', 'S1'), ('value', '<i4')])

如果您只想打印过滤后的记录,就像在示例输出中一样,我会这样做并捕获异常:

for rec in data:
    try:
        print int(rec.names), rec.value
    except:
        pass

打印

1 20
3 20

答案 1 :(得分:0)

您可以使用isinstance()

for i in data:
    if isinstance(data.name, int):
        print data.name, data.value

new_data = list(x for x in data if isinstance(x.name, int))

在这个例子中运行良好:

data = [[1,10], ["a", 20], [2, 30], ["b", 40], [3, 50]]
new_data = list(x for x in data if isinstance(x[0], int))
print new_data