我有一个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的存储方式或错误,这是预期的行为吗?
是否有一种干净的方法可以避免这种情况发生,或者我只需要在加载后“修复”索引。不知道最好的方法是做什么。
答案 0 :(得分:1)
它们是0.13.1中引入的选项(可能是0.13.0),您可以在dropna=False
上设置put/append
以避免丢弃全NaN行。这样做是为了提高效率,因为大多数情况下存储Panel,你有很多全NaN行,但没有理由存储它们。
否则将保留频率信息。请注意,如果您是appending
,则多次附加时不会保留频率信息。
如果您需要重新推断频率(如果可能),您可以随时pd.infer_freq(an_index)
。通常,如果需要,这可以在任何情况下自动完成。