2015-08-28 138 views
1

我正在處理時間序列數據,並試圖根據該時間序列的原始採樣頻率(或其他相關元數據)對各種時間序列進行操作。我可以使用以下方法成功設置元數據:熊貓列上的元數據丟失

a_df._metadata = ["orig_freq"] 
a_df["a_col"].orig_freq = "D" 

這似乎是成功的。現在我要基於元數據標準應用功能:

for i in a_df.columns: 
    if a_df[i].orig_freq == "D": 
     a_df[i + "_a_new_col"] = a_function(a_df[i]) 
    else: 
     a_df[i + "_a_new_col"] = a_function_2(a_df[i]) 

這適用於在數據幀的第一列,但該列成功運行後,我收到以下錯誤:

AttributeError: 'Series' object has no attribute 'orig_freq' 

在這一點,所有分配的元數據已被刪除。我在元數據分配中做錯了什麼?

+0

不應該是'i.orig_freq'? – Ashalynd

+0

元數據應該是特定於每列的,這代表了不同的時間序列。整個數據幀已被標準化爲單個採樣頻率,但我想保留每個包含列的單個原始採樣頻率的信息。謝謝! –

回答

0

我認爲_metadata需要在課堂上定義(即Series._metadata),雖然即使這樣,也可能有一些問題。例如,請參閱issue以獲得更多討論。

如果每列都有一段元數據,那麼只需使用MultiIndex列來存儲它,您的生活可能會更輕鬆。例如,這樣的事情:

In [43]: df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]}) 

In [44]: orig_freqs = {'a': 'D', 'b': 'Q'} 

In [45]: df.columns = pd.MultiIndex.from_tuples(([(c, orig_freqs[c]) for c in df])) 

In [46]: df 
Out[46]: 
    a b 
    D Q 
0 1 4 
1 2 5 
2 3 6 

In [47]: for (col, orig_freq) in df: 
    ...:  df[('new_col', orig_freq)] = a_function(df[(col, orig_freq)]) 
+0

這很好,謝謝。是的,我會想象爲班級定義元數據會有問題。 –