我正在尝试通过尝试创建一个使用exhnage rate表将货币标准化为所有GBP的类来在python中练习课程。我不确定为什么会出现以下错误。 CurrencyCombo是exhnagerate表中的一列名称,我将其作为“ CurrencyPairCol”传递给init
rateList = ['EURGBP','USDGBP', 'SEKGBP']
Month = ['2018-11', '2018-12', '2019-01', '2019-02', '2019-03']
class CurrencyNormalize():
def __init__(self,filename,rateList,monthList,orders_filename,CurrencyPair):
self.ExchangeRate = pd.read_csv(filename)
self.OrdersTrain = pd.read_csv(orders_filename)
self.rateList=rateList
self.monthList=monthList
self.currencyPairCol=self.ExchangeRate[CurrencyPair]
def remove_char(self):
return (self.replace('GBP', ''))
def normalize(self):
ExchangeRateFilt= self.ExchangeRate[self.ExchangeRate.CurrencyCombo.isin(self.rateList)]
monthOnly= ExchangeRateFilt[ExchangeRateFilt.TradeMonth.isin(self.monthList)]
print(monthOnly['CurrencyCombo'])
monthOnly['CurrencyCombo] = monthOnly['CurrencyCombo].apply(self.remove_char())
我想在normalize函数中应用remove_char函数,但是我不确定自己做错了什么。为什么我按以下方式运行以上代码:
CurrencyNormalize('MonthlyExchangeRates.csv',rateList,Month,'Orderss.csv','CurrencyCombo').normalize()
我收到以下错误:
AttributeError: 'CurrencyNormalize' object has no attribute 'replace'
我认为该错误与我尝试使用该函数的OOP方式之前应用remove_char函数有关:
def remove_char(col):#
return (col.replace('GBP', ''))
我将其称为:
ExchangeRate['CurrencyCombo'].apply(remove_char)
其中汇率为df。我如何在类中概括函数remove_char?
答案 0 :(得分:1)
self
是指您的班级。调用self.replace()
时,您正在尝试运行方法replace
(不存在)。您要执行的操作类似于:
self.ExchangeRate[CurrencyPair].replace('GBP', '')
编辑:由于您正确定义了属性currencyPairCol
,因此可以简单地调用:
self.currencyPairCol.replace('GBP', '')
很显然,后者将仅修改属性currencyPairCol
,而不修改最初导入的数据框ExchangeRate
(也不会修改其中的列CurrencyPair
)