Python 写入HDFStore时是否可以保留DatetimeIndex的频率?

Python 写入HDFStore时是否可以保留DatetimeIndex的频率?,python,pandas,scipy,pytables,hdf,Python,Pandas,Scipy,Pytables,Hdf,我有一个数据帧,其中索引是(注意Freq:H)- 然后用以下文字将其读回: df = hdfstore['/table'] 看看索引,我看到: <class 'pandas.tseries.index.DatetimeIndex'> [2011-01-11 04:00:00, ..., 2013-12-31 23:00:00] Length: 24656, Freq: None, Timezone: None [2011-01-11 04:00:00, ..., 2013-12

我有一个数据帧,其中索引是(注意Freq:H)-

然后用以下文字将其读回:

df = hdfstore['/table']
看看索引,我看到:

<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-11 04:00:00, ..., 2013-12-31 23:00:00]
Length: 24656, Freq: None, Timezone: None

[2011-01-11 04:00:00, ..., 2013-12-31 23:00:00]
长度:24656,频率:无,时区:无
请注意,Freq现在为None,而且行数更少,开始日期时间更晚。第一行现在是原始数据帧的第一行,其中至少包含一个非NA列值

首先,这种预期行为是由于HDF5格式和数据帧存储方式的限制,还是一个bug


是否有一个干净的方法来避免这种情况发生,或者我只需要在加载后“修复”索引。不确定这样做的最佳方式是什么。

他们的选项是在0.13.1中引入的(可能是0.13.0),您可以在
put/append
上设置
dropna=False,以避免删除一行。这样做是为了提高效率,因为大多数情况下,在存储面板时,您有很多NaN行,但没有理由存储它们

否则,将保留频率信息。请注意,如果要追加
,则如果多次追加,则不会保留频率信息


如果需要重新推断频率(如果可能的话),您可以始终
pd.expert\u freq(一个索引)
。通常,如果需要的话,这在任何情况下都会自动完成。

一个快速而棘手的解决方法是只添加一个包含所有0的伪列。然后,在重新加载时,保留DatetimeIndex的频率。很明显,这会带来不必要的存储开销。谢谢Jeff-工作起来很有魅力(0.13.1)。现在,我们来记录它。这里有文档(用于另一个函数),文档字符串:。欢迎在提及表格格式的开始部分(在警告/注释块中)提供简短的介绍。公关请!
df = hdfstore['/table']
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-11 04:00:00, ..., 2013-12-31 23:00:00]
Length: 24656, Freq: None, Timezone: None