2013-11-28 4 views
1

시간에 따라 데이터 프레임에서 데이터를 선택하는 데 문제가 있습니다.timeseries 데이터 프레임에서 1 시간 동안 데이터 선택

10 분 간격으로 증가하는 데이터가 몇 개월 있습니다.

매 시간마다 특정 날짜의 각 시간에 대해 데이터를 선택 (다른 데이터 프레임 생성)하고 싶습니다. 그러나 표현을 만드는 데 문제가 있습니다.

x=all_data.resample('D').index 
for day in range(20): 

     c=x.day[day] 
     d=x.month[day] 
     print data['%(a)s-%(b)s-2009' %{'a':c, 'b':d} ] 

하지만 난 시간 동안 그것을 할 경우, 그것은 작동하지 않습니다

내가 일을 선택을 한 방법이다. mm :이 형식 일/월/YYY의 HH에서와 같이

raise KeyError('no item named %s' % com.pprint_thing(item)) 
KeyError: u'no item named 4-9-2009 0' 

사실이다 : SS

내가이 용이해야 확신하고

x=data['04-09-2009'].resample('H').index 

for hour in range(8): 
    daydata=data['4-9-2009 %(a)s' %{'a':x.hour[hour]}] 

나는 오류를 얻을 resample과 관련이 있습니다. 문제는 난 그냥 (나중에 그것을 상관 관계)

건배 데이터 프레임을 선택 DAT와 아무것도하고 싶지 않아입니다

답변

1

당신이로 집계하려는 경우가 아니면 당신은 당신의 데이터를 재 샘플링 할 필요가 없습니다 당신은 단지 데이터의 특정 일의 가치를 원하는 경우에

, 당신은 .loc 속성에 따라 예에 사용할 수있는 매일 값 (예를 들어, 합계, 최대, 평균)를 시작합니다 :

import numpy as np 
import pandas 
N = 3700 
data = np.random.normal(size=N) 
time = pandas.DatetimeIndex(freq='10T', start='2013-02-15 14:30', periods=N) 
ts = pandas.Series(data=data, index=time) 
ts.loc['2013-02-16'] 

사용에 대한 좋은 점 .loc은 시계열을 사용하여 원하는대로 날짜를 지정할 수 있습니다. 그래서 특정 시간 동안, 당신이 말하는 것 :

ts.loc['2013-02-16 13'] # notice that i didn't put any minutes in there 

을 마찬가지로, 당신이 한달 내내 당겨 수 있습니다

ts.loc['21013-02'] 

당신이 문자열 서식 발생한 문제 당신이 '입니다 수동으로 문자열을 0으로 채 웁니다. 따라서 오후 2 자리 시간 (예 : 오후)은 3 자리 표시로 끝납니다 (유효하지 않습니다). 나는 시간의 특정 집합을 통해 루프를 원하는 그렇다면, 내가 할 것 :

hours = [2, 7, 12, 22] 
for hr in hours: 
    print(ts.loc['2013-02-16 {0:02d}'.format(hr)]) 

02d 형식 문자열은 digit (정수)에서 문자열을 구성하는 파이썬에게 그 두 개의 다양한 문자와 패드 이상입니다 필요한 경우 왼쪽의 0 문자열. 또한 다른 형식 대신 날짜를 YYYY-mm-dd으로 지정해야 할 수도 있습니다.

+0

아, 감사합니다. 판다에서 색인을 생성 할 때의 혼란을 분명히했습니다. 내가 가진 한 가지 작은 문제는'daydata = data.loc [ '4-9-2009 0 % (a) s'% { 'a': hour}]'와 같이'0'을 쓰지 않는다면' 오류가 발생했습니다. 제로를 강요하는 방법이 있습니까? –

+0

@AshleighClayton 내 수정보기 –

관련 문제