写入HDFStore时,是否可以保留Pandas tseries DatetimeIndex的频率?

时间:2014-05-07 15:28:24

标签: python pandas scipy pytables hdf

我有一个Pandas DataFrame,其索引是(注意Freq:H) -

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

有多个列,但前几行(以及其他分散的行)都包含所有NA条目。如果我将其写入HDF文件,那么:

hdfstore.put('/table', df, format='table', data_columns=True, append=False)

然后阅读:

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

请注意,Freq现在为None,并且行数较少,开始日期时间较晚。第一行现在是原始DataFrame的第一行,其中包含至少一个非NA列值。

首先,由于HDF5格式的限制以及DataFrames的存储方式或错误,这是预期的行为吗?

是否有一种干净的方法可以避免这种情况发生,或者我只需要在加载后“修复”索引。不知道最好的方法是做什么。

1 个答案:

答案 0 :(得分:1)

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

否则将保留频率信息。请注意,如果您是appending,则多次附加时不会保留频率信息。

如果您需要重新推断频率(如果可能),您可以随时pd.infer_freq(an_index)。通常,如果需要,这可以在任何情况下自动完成。