2016-04-03 4 views
4

Ich habe den folgenden Code aus dem Buch Python für Finanzen. Aber die Rundungsfunktion von numpy verursacht einen Fehler wie "return round (Dezimalzahlen, out) TypeError: round() braucht höchstens 2 Argumente (3 gegeben)"python numpy runde Funktion seltsamer Fehler

weiß jemand, was ich falsch mache?

import numpy as np 
import pandas as pd 
import pandas.io.data as web 

sp500 = web.DataReader('^GSPC', data_source='yahoo', 
          start='1/1/2000', end='4/14/2014') 
sp500.info() 
sp500['Close'].plot(grid=True, figsize=(8, 5)) 

sp500['42d'] = np.round(pd.rolling_mean(sp500['Close'], window=42), 2) 
+0

Welche Version von Pandas verwendest du? – Alexander

+0

Es funktioniert für mich wie angegeben, Runden zu 2 Orten. Noch wichtiger ist, dass Sie nur zwei Argumente richtig angeben. – roadrunner66

+0

arbeitete für mich auch. – Hun

Antwort

3

Auf der Grundlage der Fehlermeldung, so scheint es, dass die Rundungsfunktion wie dies in numpy 1.11.0 sieht:

try: 
    round = a.round 
except AttributeError: 
    return _wrapit(a, 'round', decimals, out) 
return round(decimals, out) 

Es nur sieht aus wie pandas.Series.round zwei Argumente (self, precision), aber numpy ist übergibt es ein zusätzliches Argument, out. Vermutlich ist dies entweder ein Bug oder eine API-Änderung in pandas oder numpy.

Es gibt zwei einfache Problemumgehungen, die ich sehen kann. Die erste ist nur direkt die Series.round() Funktion zu verwenden:

sp500['42d'] = pd.rolling_mean(sp500['Close'], window=42).round(2) 

Die andere Option ist nur die numpy.round Funktion auf die zugrunde liegende numpy Array gelten:

sp500['42d'] = np.round(pd.rolling_mean(sp500['Close'], window=42).values, 2) 

bearbeiten: Sieht aus wie das a bekanntes Problem. Siehe the pandas github tracker, issue #12644.