过滤器我有一个数据文件的文件在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
过滤器我有一个数据文件的文件在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
可以使用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
如果你想同时保留的过滤记录的结构来过滤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
谢谢!看起来不错 – mark
在一个numpy的recarray,列中的所有值都是相同的类型。这只有在他使用object作为第一个字段的数据类型时才有效,这是不推荐的,几乎肯定不是csv2rec默认返回的值。 – AFoglia