나는 timeseries 데이터를 조작하기 위해 DatetimeIndex
과 함께 팬더 데이터 프레임을 사용하고 있습니다. 데이터는 UTC
시간에 저장되며 보통 (순진한 DatetimeIndex
과 함께) 그 방식으로 유지하고 출력에만 시간대를 사용합니다. 세상에는 시간대를 조작하는 것보다 더 혼란 스럽기 때문에 그런 식으로 좋아합니다.재구성 된 팬더 데이터 프레임의 시간대를 변경
In: ts = pd.date_range('2017-01-01 00:00','2017-12-31 23:30',freq='30Min')
data = np.random.rand(17520,1)
df= pd.DataFrame(data,index=ts,columns = ['data'])
df.head()
Out[15]:
data
2017-01-01 00:00:00 0.697478
2017-01-01 00:30:00 0.506914
2017-01-01 01:00:00 0.792484
2017-01-01 01:30:00 0.043271
2017-01-01 02:00:00 0.558461
은 내가 아니에요 경우 열
df.index = [df.index.time,df.index.date]
df_new = df['data'].unstack()
In: df_new.head()
Out :
2017-01-01 2017-01-02 2017-01-03 2017-01-04 2017-01-05 \
00:00:00 0.697478 0.143626 0.189567 0.061872 0.748223
00:30:00 0.506914 0.470634 0.430101 0.551144 0.081071
01:00:00 0.792484 0.045259 0.748604 0.305681 0.333207
01:30:00 0.043271 0.276888 0.034643 0.413243 0.921668
02:00:00 0.558461 0.723032 0.293308 0.597601 0.120549
에 대한 인덱스를 따라 시간과 날짜를 가지고 내가 dataframe을 바꿀 수 있도록 해 매일 시간에 비해 데이터의 도표를 플롯 할 시간대 걱정이 같은 플롯 할 수 있습니다 :
fig, ax = plt.subplots()
ax.plot(df_new.index,df_new)
하지만 로컬 시간대의 데이터를 플롯 할 (tz = pytz.timezone('Australia/Sydney'
를) 일광 절약 시간에 대한 수당을 만 번 nd 날짜는 더 이상 Timestamp
개체가 아니므로 팬더 시간대 처리를 사용할 수 없습니다. 아니면 내가 할 수 있니? 내가, 내가 수동으로 전환 할 노력하고있어 수없는 가정
(DST 부여는 오전 2시에서 1/10 시작 새벽 2에서 1/4 완료), 그래서 여기까지있어 :
df_new[[c for c in df_new.columns if c >= dt.datetime(2017,4,1) and c <dt.datetime(2017,10,1)]].shift_by(+10)
df_new[[c for c in df_new.columns if c < dt.datetime(2017,4,1) or c >= dt.datetime(2017,10,1)]].shift_by(+11)
하지만 기능을 작성하는 방법에 대해서는 확실하지 않습니다. shift_by
IIUC,'df.index = df.index.tz_localize ('UTC') tz_convert ('호주/시드니')'.? –
그게 쉬웠습니다. 나는 적당한 식사를하고 있었다. 고맙습니다. – doctorer
작동하는지 (100 % 확신 할 수는 없지만 스태킹/플로팅을하지 않았 음) 알려 주시면 답변을 게시 해 드리겠습니다. –