日期时间、熊猫和时区问题: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”的主要内容,如果未能解决你的问题,请参考以下文章