過濾器我有一個數據文件的文件在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