選擇特定的行我有以下格式的一些數據:從GROUPBY數據幀
56.00 101.85 52.40 101.85 56.000000 101.850000 1
56.00 100.74 50.60 100.74 56.000000 100.740000 2
56.00 100.74 52.10 100.74 56.000000 100.740000 3
56.00 102.96 52.40 102.96 56.000000 102.960000 4
56.00 100.74 55.40 100.74 56.000000 100.740000 5
56.00 103.70 54.80 103.70 56.000000 103.700000 6
56.00 101.85 53.00 101.85 56.000000 101.850000 7
56.00 102.22 52.10 102.22 56.000000 102.220000 8
56.00 101.11 55.40 101.11 56.000000 101.110000 9
56.00 101.11 54.80 101.11 56.000000 101.110000 10
56.00 101.85 52.40 101.85 56.000000 101.850000 1
56.00 100.74 50.60 100.74 56.000000 100.740000 2
........
我需要的是一個特定id
(最後一列)中的數據。 隨着numpy
我以前做的:
d=loatxt('filename')
wanted = d[ d[:,6]==id ]
現在的我學習大熊貓才知,那是pandas.read_csv()
真的更快這loadtxt()
。
所以在邏輯上我想知道是否有可能做到與熊貓同樣的過濾(也許它更快)。
我首先想到的是想groupby
如下:
p=pd.read_csv('filename', sep= ' ', header=None, names=['a', 'b', 'x', 'y', 'c', 'd', 'id'])
d = p.groupby(['id'])
#[ i, g in p.groupby(['id']) if i ==1] # syntax error, why?
的問題是:是否有一個比較簡單的方法,從假設id==1
的行p
做選擇?
編輯
試圖提出的解決方案:
%timeit t_1 = n[ n[:,6]==1 ][:,2:4]
10 loops, best of 3: 60.8 ms per loop
%timeit t_2 = p[ p['id'] == 1 ][['x', 'y']]
10 loops, best of 3: 70.9 ms per loop
似乎numpy
在這裏更快一點是Pandas
也就是說,在這種情況下工作的最快方法是: 1)首先用熊貓讀取數據read_csv
2)將數據轉換爲numpy.array
3)而不是工作。
這個結論是否正確?
首先,我覺得不同的是非常小的。所以重要的問題是:對於你和你的應用程序來說最簡單的工作是:numpy還是pandas?你當然可以用pandas讀取數據,然後進一步使用numpy數組,但是如果你喜歡使用命名列,或者使用異構數據,我認爲將數據保存在pandas數據框中可以帶來真正的好處。 – joris
別的,鏈接索引不是真的建議,你也可以這樣做:''p.loc [p ['id'] == 1,['x','y']]'' – joris