为什么此代码会出现以下错误?
TypeError:simple_returns()需要1个位置参数但是2个被赋予
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 :(得分: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
被命名为self作为约定来提醒我们它是对象。因此,如果要传递数据帧,则需要将方法签名更改为:
def simple_returns(self, a_df):
答案 1 :(得分:0)
只需在类的方法中添加一个参数即可接收pandas.Series
,并确保在系列中应用pct_change()
方法,而不是在 self 上应用类对象:< / p>
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