2017-04-13 104 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