在转换为系列时,Pandas Timezone Aware Index会丢弃时区

我试图将数据帧的时间索引作为一个系列,但是当我调用方法to_series时,它似乎正在删除时区.以下是一个例子.这是一个错误还是我做错了什么?

rows = 50
df = pd.DataFrame(np.random.randn(rows,2), columns=list('AB'), index=pd.date_range('1/1/2000', periods=rows, freq='1H', tz=pytz.UTC))

print df.index[-1]
# 2000-01-03 01:00:00+00:00

print df.index.to_series()[-1]
# 2000-01-03 01:00:00


print df.index[-1].tzinfo
# UTC

print df.index.to_series()[-1].tzinfo
#None

解决方法:

不,你没有做错什么,也不是一个错误.
这是目前已知的pandas / numpy限制:只有索引支持时区感知日期时间数据.在一系列中,数据存储为numpy datetime64类型,不支持时区.将此时区功能添加到系列有一个解决的问题:https://github.com/pydata/pandas/issues/8260

解决方法是将数据存储为对象dtype而不是datetime64(然后它们将存储为Timestamp对象,datetime.datetime的子类).这将使您能够保留时区信息.
to_series有一个keep_tz关键字参数获取它(见docstring):

In [34]: df = df.tz_convert('US/Eastern')

In [35]: df.index.to_series()[-1]
Out[35]: Timestamp('2000-01-03 01:00:00')

In [36]: df.index.to_series(keep_tz=True)[-1]
Out[36]: Timestamp('2000-01-02 20:00:00-0500', tz='US/Eastern', offset='H')

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...