2013-06-26 29 views
1

过滤器我有一个数据文件的文件在data.csv我怎么能做到在recarray

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 

回答

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 
+0

在一个numpy的recarray,列中的所有值都是相同的类型。这只有在他使用object作为第一个字段的数据类型时才有效,这是不推荐的,几乎肯定不是csv2rec默认返回的值。 – AFoglia

4

如果你想同时保留的过滤记录的结构来过滤recarray:

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 
+0

谢谢!看起来不错 – mark