在转换为系列时,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')
点赞