【问题标题】:Adding timezone to time in pandas dataframe在熊猫数据框中添加时区
【发布时间】:2017-09-09 16:51:24
【问题描述】:

我的专栏以秒为单位。这次的时区是 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']

所以...

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

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

因此,pandas 将我的 UTC 时间视为“欧洲/华沙”,并将它们延迟一小时以使它们成为 UTC,这破坏了我的数据。

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

【问题讨论】:

    标签: python pandas datetime timezone pytz


    【解决方案1】:

    所以我无法复制您的结果,但我使用了稍微不同的方法来显示创建的时间戳。我没有使用支持度较差的%s,而是直接计算了UTC epoch的秒数:

    代码:

    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
    

    【讨论】:

    • 感谢您的回复。我很快就会仔细研究它。现在我已经“解决”了我的代码:os.environ['TZ'] = 'UTC'。由于在我使用 .tz_localize(pytz.utc) 后我的 UTC 时间戳没有改变(根据我的 tz -> Europe/Warsaw),因为 UTC 和 UTC 时区之间没有时差。
    猜你喜欢
    • 2018-10-06
    • 2022-09-24
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2019-12-21
    相关资源
    最近更新 更多