2017-04-13 8 views
3

私の時間は秒単位です。今回のタイムゾーンはUTCですが、パンダはそれを知らないのです。この情報を追加したいと思います。パンダのデータフレームにタイムゾーンを追加する

df_data['transaction_creation_date'] 

0  1484161304 
1  1489489785 
2  1489161124 
3  1488904824 
4  1484908677 
5  1485942900 
6  1490854506 
7  1485895432 
8  1485975392 
9  1489266328 
10  1488525196 
11  1490363033 
12  1490617794 
13  1486560642 
14  1487170224 
15  1484923852 

だから私はこのような何か:

df_times = pd.DatetimeIndex(pd.to_datetime(df_data['transaction_creation_date'], unit='s')) 
df_times = df_times.tz_localize(pytz.utc) 

をそして、私はdf_timesに保存されているタイムスタンプを印刷するとき、私は持っている:

print(df_times.strftime('%s')) 

['1484157704' '1489486185' '1489157524' ..., '1490684098' '1490284646' 
'1489602636'] 

そう...

マイUTC行0の時刻:1484161304時間帯に関する情報を追加した後にに変更されました...

私のタイムゾーンは "ヨーロッパ/ワルシャワ"で、私のタイムゾーンとUTCの差は3600で、1484161304 - 1484157704 = 3600です。

パンダは私のUTCタイムを「ヨーロッパ/ワルシャワ」として扱い、1時間遅らせて自分のデータを破壊したUTCにしました。

どうすればUTCのタイムゾーンを自分の時間に設定できますか?

答えて

0

私はあなたの結果を複製することができませんでしたが、作成されたタイムスタンプを表示する方法が少し異なります。

コード:

utc_at_epoch = pytz.utc.localize(dt.datetime(1970, 1, 1)) 
for t in df_times.tz_localize(pytz.utc): 
    print(int((t - utc_at_epoch).total_seconds())) 

テストコード:

import pandas as pd 
import datetime as dt 
import pytz 

df_data = pd.DataFrame([ 
    1484161304, 
    1489489785, 
    1489161124, 
], columns=['transaction_creation_date']) 
print(df_data) 

df_times = pd.DatetimeIndex(pd.to_datetime(
    df_data['transaction_creation_date'], unit='s')) 

utc_at_epoch = pytz.utc.localize(dt.datetime(1970, 1, 1)) 
for t in df_times.tz_localize(pytz.utc): 
    print(int((t - utc_at_epoch).total_seconds())) 

私はやや不十分%sサポートし、代わりに直接UTCエポックからの秒数を計算を使用していませんでした結果:

transaction_creation_date 
0     1484161304 
1     1489489785 
2     1489161124 
1484161304 
1489489785 
1489161124 
+0

お返事ありがとうございます。私はすぐにそれを詳しく見ていきます。今のところ、私は、 'os.environ ['TZ'] = 'UTC'でコードを"回避 "しています。 UTCとUTCタイムゾーンの時間差がないので、私のUTCタイムスタンプは変更されません(私のtz - > Europe/Warsawによる).tz_localize(pytz.utc)を使用した後、 – F1sher

関連する問題