Как мне вызвать функцию в моем классе? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь попрактиковаться в занятиях на питоне, пытаясь создать класс, который нормализует валюту ко всем фунтам, используя таблицу курсов обмена.Я не уверен, почему я получаю ошибку ниже.CurrencyCombo - это имя столбца в таблице exchnagerate, которое я передаю в init как «CurrencyPairCol»

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())

Я хочу применить функцию remove_char в функции нормализации, но я не уверен, что я это делаюнеправильно.Когда я запускаю вышеизложенное следующим образом:

CurrencyNormalize('MonthlyExchangeRates.csv',rateList,Month,'Orderss.csv','CurrencyCombo').normalize() 

Я получаю следующую ошибку:

AttributeError: 'CurrencyNormalize' object has no attribute 'replace'

Я думаю, что ошибка связана с тем, как я применяю функцию remove_char, прежде чем япопробовал ООП способ, которым функция была:

def remove_char(col):#


    return (col.replace('GBP', ''))

, и я назвал бы это как:

ExchangeRate['CurrencyCombo'].apply(remove_char)

, где Обменный курс - df.Как мне обобщить функцию remove_char внутри класса?

1 Ответ

1 голос
/ 18 июня 2019

self относится к вашему классу. Когда вы вызываете self.replace(), вы пытаетесь запустить метод replace (которого не существует). То, что вы хотите сделать, это что-то вроде:

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

РЕДАКТИРОВАТЬ: Поскольку вы правильно определили атрибут currencyPairCol, вы можете просто позвонить:

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

Очевидно, что последний изменит только атрибут currencyPairCol, а не первоначально импортированный фрейм данных ExchangeRate (ни столбец CurrencyPair в нем)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...