1

我有一个 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 的存储方式,还是一个错误?

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

4

1 回答 1

1

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

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

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

于 2014-05-07T17:44:22.107 回答