2014-05-07 79 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

相關問題