日期时间、熊猫和时区问题:AttributeError:“datetime.timezone”对象没有属性“_utcoffset”

Posted

技术标签:

【中文标题】日期时间、熊猫和时区问题:AttributeError:“datetime.timezone”对象没有属性“_utcoffset”【英文标题】:Datetime, pandas, and timezone woes: AttributeError: 'datetime.timezone' object has no attribute '_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'

我做错了什么?

【问题讨论】:

【参考方案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 似乎解决了这个问题,但尚未修复。我计划在这些票证中添加信息,以提供更清晰的重现案例。

以上是关于日期时间、熊猫和时区问题:AttributeError:“datetime.timezone”对象没有属性“_utcoffset”的主要内容,如果未能解决你的问题,请参考以下文章

如何将熊猫中的日期时间列全部转换为同一时区

如何在熊猫中使用 read_csv 将时区感知日期时间作为时区天真的本地 DatetimeIndex 读取?

更改熊猫中日期时间列的时区并添加为分层索引

将UTC时间戳转换为熊猫中的本地时区问题

日期时间和熊猫之间的 Unix 纪元值不匹配

熊猫:计算时间戳和当前时间之间经过的时间,但只有营业时间和时区