我的列以秒为单位。这个时间的时区是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之间的差异3600
而1484161304 - 1484157704 = 3600
。
所以熊猫把我的UTC时间当作"欧洲/华沙",并把它们切换成UTC时间,这破坏了我的数据。
如何将 UTC 时区设置为我的时间,以免发生?
所以我无法复制您的结果,但我使用稍微不同的方法来显示创建的时间戳。 我没有使用支持有点差的%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