在pandas数据帧中添加时区到时间

时间:2017-04-13 14:04:03

标签: python pandas datetime timezone pytz

我的专栏时间只有几秒钟。此时的时区是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']

因此...

我在第0行的UTC时间:1484161304我添加了有关时区的信息后更改为1484157704 ...

我的时区是“欧洲/华沙”,我的时区和UTC之间的差异是36001484161304 - 1484157704 = 3600

所以大熊猫把我的UTC时间视为“欧洲/华沙”,然后将它们换了一小时,使它们成为UTC,这损坏了我的数据。

如何将UTC时区设置为我的时间,以免发生?

1 个答案:

答案 0 :(得分: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