2014-05-07 37 views
1

我有一个熊猫数据帧中的索引(注意频率:H) -写入HDFStore时,是否可以保留Pandas tseries DatetimeIndex的频率?

<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格式的局限性,数据帧的存储方式或错误而导致的预期行为?

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

+0

一个快速又脏的解决方法是只添加一个包含全0的虚拟列。然后,在重新加载时,DatetimeIndex的Freq被保留。显然,这有不必要的存储开销。 – DavidJ

回答

1

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

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

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

+0

谢谢杰夫 - 像一个魅力(0.13.1)。现在记录下来。 – DavidJ

+0

文档在这里(用于不同的功能)和文档字符串:http://pandas-docs.github.io/pandas-docs-travis/io.html#multiple-table-queries。在表格格式被提及的开始部分(在警告/注释块中)可能会受欢迎。公关请! – Jeff

相关问题