【问题标题】:Datetime, pandas, and timezone woes: AttributeError: 'datetime.timezone' object has no attribute '_utcoffset'日期时间、熊猫和时区问题:AttributeError:“datetime.timezone”对象没有属性“_utcoffset”
【发布时间】:2019-07-16 10:20:08
【问题描述】:

这是我正在尝试做的一个玩具示例:

import pandas as pd
import datetime
import matplotlib
matplotlib.use('agg')  # noqa
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from time import sleep

lst = []
for x in range(0, 10):
    lst.append((datetime.datetime.now(datetime.timezone.utc), x))
    sleep(1)

df = pd.DataFrame(lst, columns=['Timestamp', 'Pressure'])
df.plot(kind='line', x='Timestamp', y='Pressure')
formatter = mdates.DateFormatter('%m/%d %T %Z', tz=df.index.tz)
plt.gca().xaxis.set_major_formatter(formatter)
plt.savefig('output.png')

当我运行它时,我得到AttributeError: 'datetime.timezone' object has no attribute '_utcoffset'

我做错了什么?

【问题讨论】:

    标签: python-3.x pandas datetime matplotlib timezone


    【解决方案1】:

    大部分是从@AndyHayden answer 抓取的,但一种选择是将datetime.datetime 转换为str 并使用pd.to_datetime 转换回“时区感知”时间戳

    df = pd.DataFrame(lst, columns=['Timestamp', 'Pressure'])
    df['Timestamp'] = pd.to_datetime(df.Timestamp.astype(str))
    ax = df.plot(kind='line', x='Timestamp', y='Pressure')
    plt.show()
    
    df = df.set_index('Timestamp')
    
    formatter = mdates.DateFormatter('%m/%d %T %Z', tz=df.index.tz)
    
    ax.xaxis.set_major_formatter(formatter)
    

    返回:

    【讨论】:

    • 这个修复对我有用。票证#12310#22859 似乎解决了这个问题,但尚未修复。我计划在这些票证中添加信息,以提供更清晰的重现案例。
    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2019-10-02
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多