2017-04-20 9 views
1

このコードでは、次のエラーが発生します。オブジェクトのメソッドにデータフレームを渡すには?

TypeError: simple_returns() takes 1 positional argument but 2 were given

import datetime as dt 
import math 
from matplotlib import style 
import numpy as np 
import pandas as pd 
import pandas_datareader.data as web 

start = dt.datetime(2000, 1, 1) 
end = dt.datetime(2016, 12, 31) 

df = web.DataReader('TSLA', 'yahoo', start, end) 


class CalcReturns: 
    def simple_returns(self): 
     simple_ret = self.pct_change() 
     return simple_ret 

    def log_returns(self): 
     simple_ret = self.pct_change() 
     log_ret = np.log(1 + simple_ret) 
     return log_ret 


myRet = CalcReturns() 
c = df['Adj Close'] 
sim_ret = myRet.simple_returns(c) 
print(sim_ret) 

答えて

0

単にpandas.Seriesを受け、シリーズでpct_change()方法を適用してくださいするには、クラスのメソッドにパラメータを追加クラスオブジェクトではありません自己

class CalcReturns: 
    def simple_returns(self, ser): 
     simple_ret = ser.pct_change() 
     return simple_ret 

    def log_returns(self, ser): 
     simple_ret = ser.pct_change() 
     log_ret = np.log(1 + simple_ret) 
     return log_ret 


myRet = CalcReturns() 
c = df['Adj Close'] 
sim_ret = myRet.simple_returns(c) 
print(sim_ret) 

# Date 
# 2010-06-29   NaN 
# 2010-06-30 -0.002511 
# 2010-07-01 -0.078473 
# 2010-07-02 -0.125683 
# 2010-07-06 -0.160937 
# 2010-07-07 -0.019243 
# 2010-07-08 0.105063 
# 2010-07-09 -0.003436 
# 2010-07-12 -0.020115 
+0

ありがとうパフェ。あなたは正しいです。偉大なアイコン! – Leigh

0

ライン:

sim_ret = myRet.simple_returns(c) 

通話CalcReturns.simple_returns()とだけつのパラメータを渡すことが表示されます。しかし、Pythonクラスのメソッドは特殊です。つまり、Pythonもオブジェクト自体を渡します。それは最初のパラメータでこれを行います。これは、パターンを参照してください理由である。

class MyClass(): 

    def my_method(self): 
     """ a method with no parameters, but is passed the object itself """ 

selfは、それがオブジェクトであることを思い出させるために慣例として自己名付けられています。あなたのデータフレームを渡したいのであれば、あなたが見えるようにメソッドのシグネチャを変更する必要があります。

def simple_returns(self, a_df): 
+0

ありがとうございました。そのホープ – Leigh

関連する問題