如何在班级中调用函数?

时间:2019-06-18 08:59:38

标签: python pandas oop

我正在尝试通过尝试创建一个使用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?

1 个答案:

答案 0 :(得分:1)

self是指您的班级。调用self.replace()时,您正在尝试运行方法replace(不存在)。您要执行的操作类似于:

self.ExchangeRate[CurrencyPair].replace('GBP', '')

编辑:由于您正确定义了属性currencyPairCol,因此可以简单地调用:

self.currencyPairCol.replace('GBP', '')

很显然,后者将仅修改属性currencyPairCol,而不修改最初导入的数据框ExchangeRate(也不会修改其中的列CurrencyPair