2015-08-28 2 views
1

Я работаю с данными временных рядов и пытаюсь квалифицировать операции по различным временным рядам на основе исходной частоты дискретизации (или других соответствующих метаданных) этого временного ряда. Я могу успешно установить метаданные следующим образом:Потерянные метаданные на столбцах Pandas

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]) 

Это работает для первого столбца в dataframe, но после того, как успешно работает на этой колонке, я получаю следующее сообщение об ошибке:

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

Это замечательно, спасибо. Да, я бы предположил, что определение метаданных для класса будет проблематичным. –

Смежные вопросы