Класс Python не может найти члена - PullRequest
2 голосов
/ 12 апреля 2019

Я пытался поместить некоторые базовые операции предварительной обработки для фрейма данных pandas в отдельный класс:

import pandas as pd
import numpy as np
from numba import jit

class MyClass:
    def _init_(self):
        pass

    @jit

    def preprocess_dataframe(self, path):
        self.df = pd.read_csv(path, index_col=False, delimiter=' ' , names=['Time', 'Downloads', 'ServerID', 'Server', 'Date'], usecols=['Time', 'Downloads', 'Server', 'Date'])

        print(self.df.head(5))
        self.df['Date'] = self.df['Date'].astype(str)
        self.df['Timestamp'] = pd.to_datetime(self.df['Time'] +' '+ self.df['Date'], format='%H:%M:%S %Y%m%d')
        self.df[['Server_alone', 'Instance']] = self.df['Server'].str.split('-' ,expand=True)

        self.df.drop(columns=['Time'], inplace=True)

        self.df['Date'] = pd.to_datetime(self.df['Date'], format='%Y-%m-%d')

        self.df.set_index(self.df['Date'])

        return self.df

Когда я вызываю эту функцию в моем основном скрипте (см. Ниже), я получаю ошибку:

AttributeError: module 'MyClass' has no attribute 'preprocess_dataframe'

Это релевантная часть моего основного сценария:

import MyClass as mc

path = 'Data.txt'

df = mc.preprocess_dataframe(path)

>>>AttributeError: module 'MyClass' has no attribute 'preprocess_dataframe'

Я посмотрел несколько других вопросов, включая this .Однако, ничто не решило мою проблему, несмотря на то, что я думаю, что исправить это довольно легко.Спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 12 апреля 2019

Вы не создали экземпляр MyClass. Вы можете исправить это:

df = mc().preprocess_dataframe(path)

Также измените оператор импорта на: from filename import MyClass as mc

Вы также можете сделать preprocess_dataframe статическим методом, как упомянуто в комментариях.

1 голос
/ 12 апреля 2019

Вы должны сделать метод статическим

import pandas as pd
import numpy as np
from numba import jit

class MyClass:
    @jit
    @staticmethod
    def preprocess_dataframe(path):
        df = pd.read_csv(path, index_col=False, delimiter=' ' , names=['Time', 'Downloads', 'ServerID', 'Server', 'Date'], usecols=['Time', 'Downloads', 'Server', 'Date'])

        print(self.df.head(5))
        df['Date'] = df['Date'].astype(str)
        df['Timestamp'] = pd.to_datetime(df['Time'] +' '+ df['Date'], format='%H:%M:%S %Y%m%d')
        df[['Server_alone', 'Instance']] = df['Server'].str.split('-' ,expand=True)

        df.drop(columns=['Time'], inplace=True)

        sdf['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')

        df.set_index(df['Date'])

        return df

и назвать его следующим образом

from filename import MyClass

path = 'Data.txt'

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