2016-05-29 10 views
-1

Ich habe einen Datenrahmen (df):Attribute: ‚Serie‘ Objekt hat kein Attribut ‚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 

vom Typ: datatype <class 'pandas.core.frame.DataFrame'>

und ich versuche, die exponentiell gewichtete gleitende Durchschnitt der berechnen Zeitreihen, die ich erfassen möchte.

Ich verwende den folgenden Code ein:

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

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

Wo McapResult der letzte Wert in der exponentiellen Serie ist

aber ich bekomme die folgende Fehlermeldung:

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

Könnte mir jemand lassen Wissen Sie, was ich tun muss, um das Problem zu beheben?

Antwort

1

Ich glaube, Sie Series.ewm eher wie schaffen neue DataFramedf verwenden können - Ergebnis ist gleich:

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:

Ich denke, Fehlerursache niedriger verion von Pandas als 0.18.0, weil pandas.Series.ewmNew in version 0.18.0 ist.

+0

Danke, ich habe versucht, den Code, aber immer noch die AttributeError: 'Series' Objekt hat kein Attribut 'Ewm' Problem. nicht sicher, was ich falsch mache – Stacey

+0

Was ist deine Version von Pandas? 'print pd.show_versions()'. Wenn "0.18", ist es ein Problem, weil "pandas.Series.ewm" ist "Neu in Version 0.18.0" - [link] (http://pandas.pydata.org/pandas-docs/stable/generated /pandas.Series.ewm.html). Ich habe die letzte Version "0.18.1" und es funktioniert sehr gut. – jezrael

+0

Danke, ja ich renne 0,17, also denke ich, dass ein Upgrade in Ordnung ist :). Gibt es Unterlagen, wie man das schmerzfrei macht? Danke – Stacey

Verwandte Themen