微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐