2016-11-30 361 views
2

因此,我對包Pandas有所瞭解。 我正在做一些關於ETF策略的背部測試,我需要對Pandas Dataframe做很多查詢。用日期時間索引或列查詢Python Pandas DataFrame

所以我們可以說我這兩個DataFrames,DF和DF1,唯一的區別是: DF有日期時間指數,而DF1有時間戳列和整數指數

In[104]: df.head() 
Out[104]: 

         high  low open close volume openInterest 
2007-04-24 09:31:00 148.28 148.12 148.23 148.15 2304400  341400 
2007-04-24 09:32:00 148.21 148.14 148.14 148.19 2753500  449100 
2007-04-24 09:33:00 148.24 148.13 148.18 148.14 2863400  109900 
2007-04-24 09:34:00 148.18 148.12 148.13 148.16 3118287  254887 
2007-04-24 09:35:00 148.17 148.14 148.16 148.16 3202112   83825 

In[105]: df1.head() 
Out[105]: 

       dates high  low open close volume openInterest 
0 2007-04-24 09:31:00 148.28 148.12 148.23 148.15 2304400  341400 
1 2007-04-24 09:32:00 148.21 148.14 148.14 148.19 2753500  449100 
2 2007-04-24 09:33:00 148.24 148.13 148.18 148.14 2863400  109900 
3 2007-04-24 09:34:00 148.18 148.12 148.13 148.16 3118287  254887 
4 2007-04-24 09:35:00 148.17 148.14 148.16 148.16 3202112   83825 

所以我測試了查詢速度一點點:

In[100]: %timeit df1[(df1['dates'] >= '2015-11-17') & (df1['dates'] < '2015-11-18')] 
%timeit df.loc[(df.index >= '2015-11-17') & (df.index < '2015-11-18')] 
%timeit df.loc['2015-11-17'] 
100 loops, best of 3: 4.67 ms per loop 
100 loops, best of 3: 3.14 ms per loop 
1 loop, best of 3: 259 ms per loop 

令我吃驚的是,使用內置了大熊貓的邏輯其實是最慢的:

df.loc['2015-11-17'] 

有誰知道這是爲什麼? 是否有任何文件或博客有關最有效的方式來查詢熊貓DataFrame?

回答

0

如果我是你,我會用更簡單的方法:

df['2015-11-17'] 

在我看來,這將是更多的「熊貓邏輯」比使用.loc[]單個日期。我猜測它也更快。

測試一分鐘OHLC數據幀:

%timeit df.loc[(df.index >= '2015-11-17') & (df.index < '2015-11-18')] 
%timeit df.loc['2015-11-17'] 
%timeit df['2015-11-17'] 

100 loops, best of 3: 13.8 ms per loop 
1 loop, best of 3: 1.39 s per loop 
1000 loops, best of 3: 486 us per loop 
+0

謝謝,夥計!我也對它進行了測試,最簡單的方法是最快的,因爲它應該是。你知道我在哪裏可以得到關於與熊貓查詢不同方法的全貌嗎? –

+0

[http://pandas.pydata.org/pandas-docs/stable/indexing.html](http://pandas.pydata.org/pandas-docs/stable/indexing.html)這是一個開始 –

+0

哈哈我實際上現在正在看它,再次感謝很多! –

相關問題