timeseriesデータを操作するために、DatetimeIndex
でPandasデータフレームを使用しています。データはUTC
の時刻に保存されています。私は通常そのように保ちます(ナイーブDatetimeIndex
)。出力にのみタイムゾーンを使用します。世界の何も私がタイムゾーンを操作しようとする以上に私を混乱させないので、私はそのように好きです。再構成されたパンダデータフレームのタイムゾーンを変更
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
のインデックスと日付に沿って時間を持つようにデータフレームの形を変えるように、今年の毎日のための時間に対するデータのグラフをプロットしたい
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
タイムゾーンを心配して、私は次のようにプロットすることができます
fig, ax = plt.subplots()
ax.plot(df_new.index,df_new)
が、私は、ローカルタイムゾーンでデータをプロットしたい(tz = pytz.timezone('Australia/Sydney'
を)夏時間のための手当を作りますが、回nd日付はもはやTimestamp
オブジェクトではないので、私はPandasタイムゾーン処理を使用することはできません。または私はできますか?私は、私は手動で、シフトやろうとしていることができないと仮定すると、
(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
特定の時間帯にデータフレームの日付を変換する (これは理想的ではありませんが、私は一緒に暮らすことができた、正しくTEH切日午前2時に真夜中に対応していない)
IIUC、 'df.index = df.index.tz_localize( 'UTC')tz_convert( 'オーストラリア/シドニー')':。またでサブプロットを作成しますか? –
それは簡単でした。私はそれが適切な食事を出していた。ありがとうございました。 – doctorer
私はそれが動作するかどうか私に教えてください(私は100%確かではない、私はスタッキング/プロットをしなかった)ので、私は答えを投稿します。 –