首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >失去时区--在用Python将神秘的熊猫DatetimeIndex保存到hdf5时的意识

失去时区--在用Python将神秘的熊猫DatetimeIndex保存到hdf5时的意识
EN

Stack Overflow用户
提问于 2014-07-17 13:43:39
回答 1查看 459关注 0票数 2

我在看熊猫0.14.1。假设我需要使用时区通过分层索引中的两个时间戳对数据进行索引。当将结果的DataFrame保存到hdf5时,我似乎失去了时区意识:

代码语言:javascript
复制
import pandas as pd
dti1 = pd.DatetimeIndex(start=pd.Timestamp('20000101'), end=pd.Timestamp('20000102'), freq='D', tz='EST5EDT')
dti2 = pd.DatetimeIndex(start=pd.Timestamp('20000102'), end=pd.Timestamp('20000103'), freq='D', tz='EST5EDT')
mux = pd.MultiIndex.from_arrays([dti1, dti2])
df = pd.DataFrame(0, index=mux, columns=['a'])

在这里,df有时区:

代码语言:javascript
复制
                                                     a
2000-01-01 00:00:00-05:00 2000-01-02 00:00:00-05:00  0
2000-01-02 00:00:00-05:00 2000-01-03 00:00:00-05:00  0

在保存并加载到hdf5之后,时区信息似乎消失了:

代码语言:javascript
复制
df.to_hdf('/tmp/my.h5', 'data')
pd.read_hdf('/tmp/my.h5', 'data')

在以下方面的成果:

代码语言:javascript
复制
                                         a
2000-01-01 05:00:00 2000-01-02 05:00:00  0
2000-01-02 05:00:00 2000-01-03 05:00:00  0

我想知道是否有一个好的解决办法,这是否是一个已知的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-17 13:52:58

当使用多索引时,在fixed格式下不支持这一点.我想应该提高,而不是实现,我想。下面是一个跟踪的问题

参见全-hdf5 5-接口文档这里

代码语言:javascript
复制
In [11]: pd.read_hdf('/tmp/my.h5', 'data').index.levels[0]
Out[11]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-01-01 05:00:00, 2000-01-02 05:00:00]
Length: 2, Freq: None, Timezone: None

但是如果您指定了table格式,它就能工作。

代码语言:javascript
复制
In [13]: df.to_hdf('/tmp/my.h5', 'data2', format='table')

In [14]: pd.read_hdf('/tmp/my.h5', 'data2')
Out[14]: 
                                                     a
2000-01-01 00:00:00-05:00 2000-01-02 00:00:00-05:00  0
2000-01-02 00:00:00-05:00 2000-01-03 00:00:00-05:00  0

In [15]: pd.read_hdf('/tmp/my.h5', 'data2').index.levels[0]
Out[15]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-01-01 00:00:00-05:00, 2000-01-02 00:00:00-05:00]
Length: 2, Freq: None, Timezone: EST5EDT

In [16]: pd.read_hdf('/tmp/my.h5', 'data2').index.levels[1]
Out[16]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-01-02 00:00:00-05:00, 2000-01-03 00:00:00-05:00]
Length: 2, Freq: None, Timezone: EST5EDT
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24805307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档