2017-04-13 80 views
3

我有我的專欄,時間以秒爲單位。此時的時區是UTC,但Pandas不知道它。我想添加這些信息。在熊貓數據框中添加時區到時間

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我添加了有關時區的信息後,更改爲1484157704 ...

我的時區是「歐洲/華沙」,我的時區和UTC的區別是36001484161304 - 1484157704 = 3600

熊貓已經將我的UTC時間視爲「歐洲/華沙」,並將它們切換一小時,以使它們成爲UTC,從而破壞我的數據。

如何設置UTC時區到我的時間,所以它不會發生?

回答

0

所以我無法複製你的結果,但我使用一種稍微不同的方法來顯示創建的時間戳。我沒有用了幾分支持%s不好,而是直接從UTC劃時代計算的秒數:

代碼:

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())) 

結果:

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

感謝您的回覆。我會盡快仔細研究一下。現在我用「os.environ ['TZ'] ='UTC''來」解決「我的代碼。感謝我使用.tz_localize(pytz.utc)之後,由於UTC和UTC時區之間沒有時差,我的UTC時間戳沒有改變(根據我的tz - > Europe/Warsaw)。 – F1sher