2014-04-24 2 views
3

이것은 매우 간단하지만 확실한 행 범위를 얻기 위해 datetime 인덱스로 판다 HDFStore 테이블을 분할하는 방법을 알 수 없습니다. 내가 좋아하는 것 예를 들어pandas HDFStore datetime 인덱스로 행 선택

mdstore = pd.HDFStore(store.h5) 
histTable = '/ES_USD20120615_MIDPOINT30s' 
print(mdstore[histTable]) 
         open  high  low  close volume WAP \ 
date                  
2011-12-04 23:00:00 1266.000 1266.000 1266.000 1266.000  -1 -1 
2011-12-04 23:00:30 1266.000 1272.375 1240.625 1240.875  -1 -1 
2011-12-04 23:01:00 1240.875 1242.250 1240.500 1242.125  -1 -1 
        ... 
[488000 rows x 7 columns] 

이 2012-01-12 22 : 30 2012-01-11 23시 0분 0초의 범위를 얻을 수 :

내가 이렇게 보이는 테이블이 : 00. 그것이 df에 있다면 나는 datetimes를 사용하여 인덱스를 조각 낼 것입니다.하지만 메모리에 모든 것을로드 할 필요가 없도록 스토어 테이블에서 직접 수행하는 방법을 알 수는 없습니다. 나는 mdstore.select(histTable, where='index>20120111')을 시도하고 내가 11, 12의 모든 내용을 가지고로 그만큼의 일을,하지만 난에 시간을 추가하는 방법을 볼 수 없었다.

답변

5

here 요구 팬더> = 0.13.0

입니다
In [2]: df = DataFrame(np.random.randn(5),index=date_range('20130101 09:00:00',periods=5,freq='s')) 

In [3]: df 
Out[3]: 
          0 
2013-01-01 09:00:00 -0.110577 
2013-01-01 09:00:01 -0.420989 
2013-01-01 09:00:02 0.656626 
2013-01-01 09:00:03 -0.350615 
2013-01-01 09:00:04 -0.830469 

[5 rows x 1 columns] 

In [4]: df.to_hdf('test.h5','data',mode='w',format='table') 

것은 인용 문자열로 지정

In [8]: pd.read_hdf('test.h5','data',where='index>"20130101 09:00:01" & index<"20130101 09:00:04"') 
Out[8]: 
          0 
2013-01-01 09:00:02 0.656626 
2013-01-01 09:00:03 -0.350615 

[2 rows x 1 columns] 

는 또한 타임 스탬프

로 직접 지정할 수 있습니다
+0

정말 완벽합니다. 감사합니다! 그 페이지를 전혀 찾지 못했습니다 - 내 인터넷 검색 능력을 향상시켜야합니다 :) – fantabolous

관련 문제