2016-05-29 3 views
-1

У меня есть dataframe (df):AttributeError: объект серии 'не имеет атрибут 'EWM'

Name: BBG.XLON.VOD.S_MKTCAP_EUR, dtype: float64 
date 
2008-02-04 125761.886753 
2008-02-05 123681.237732 
2008-02-06 124062.436220 
2008-02-07 121107.388396 
2008-02-08 124216.990692 
2008-02-11 122075.831250 
2008-02-12 126868.359688 
2008-02-13 124942.668750 
2008-02-14 124220.030625 
2008-02-15 121296.275000 
2008-02-18 123004.414768 
2008-02-19 119431.907487 
2008-02-20 113577.349414 

типа: datatype <class 'pandas.core.frame.DataFrame'>

и пытаюсь вычислить экспоненциально взвешенное скользящее среднее которые я хочу захватить.

Я использую следующий код:

df = pd.DataFrame({'': stockData[unique_id+"_MKTCAP_EUR"]}) 

McapResult = df.ewm(alpha=0.1, adjust=False).mean().iloc[-1] 

Где McapResult это последнее значение в экспоненциальной серии

, но я получаю следующее сообщение об ошибке:

AttributeError: 'DataFrame' object has no attribute 'ewm'

Может кто-то дайте мне знаете, что мне нужно сделать, чтобы исправить это, пожалуйста?

ответ

1

Я думаю, что вы можете использовать Series.ewm, а также создавать новые DataFramedf - результат такой же:

import pandas as pd 

stockData = pd.DataFrame({'BBG.XLON.VOD.S': {pd.Timestamp('2008-02-14 00:00:00'): 124220.030625, pd.Timestamp('2008-02-20 00:00:00'): 113577.34941400001, pd.Timestamp('2008-02-08 00:00:00'): 124216.99069200001, pd.Timestamp('2008-02-13 00:00:00'): 124942.66875, pd.Timestamp('2008-02-15 00:00:00'): 121296.27499999999, pd.Timestamp('2008-02-06 00:00:00'): 124062.43622, pd.Timestamp('2008-02-19 00:00:00'): 119431.90748699999, pd.Timestamp('2008-02-04 00:00:00'): 125761.886753, pd.Timestamp('2008-02-11 00:00:00'): 122075.83125, pd.Timestamp('2008-02-07 00:00:00'): 121107.38839600001, pd.Timestamp('2008-02-05 00:00:00'): 123681.23773199999, pd.Timestamp('2008-02-18 00:00:00'): 123004.414768, pd.Timestamp('2008-02-12 00:00:00'): 126868.35968800001}}) 
stockData.index.name = 'date' 
print (stockData) 
      BBG.XLON.VOD.S 
date      
2008-02-04 125761.886753 
2008-02-05 123681.237732 
2008-02-06 124062.436220 
2008-02-07 121107.388396 
2008-02-08 124216.990692 
2008-02-11 122075.831250 
2008-02-12 126868.359688 
2008-02-13 124942.668750 
2008-02-14 124220.030625 
2008-02-15 121296.275000 
2008-02-18 123004.414768 
2008-02-19 119431.907487 
2008-02-20 113577.349414 

unique_id = 'BBG.XLON.VOD.S' 
McapResult = stockData[unique_id].ewm(alpha=0.1, adjust=False).mean().iloc[-1] 
print (McapResult) 
122786.42433 

EDIT:

Я думаю, что ошибка причина низкой Verion панд как 0.18.0, потому что pandas.Series.ewm есть New in version 0.18.0.

+0

Спасибо, я попробовал код, но все еще получаю объект AttributeError: объект «Series» не имеет проблемы с атрибутом «ewm». Не уверен, что я делаю неправильно – Stacey

+0

Какова твоя версия панд? 'print pd.show_versions()'. Если ниже '0.18', это проблема, потому что' pandas.Series.ewm' является 'New в версии 0.18.0.' - [link] (http://pandas.pydata.org/pandas-docs/stable/generated /pandas.Series.ewm.html). У меня последняя версия '0.18.1', и она работает очень хорошо. – jezrael

+0

Спасибо, да, я выполняю 0.17, поэтому я предполагаю, что обновление в порядке :). Есть ли какая-либо документация о том, как сделать это безболезненно? Спасибо – Stacey

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