簡體   English   中英

如何正確應用類方法?

[英]How to apply class method correctly?

我描述了一個類,該類將從服務器將數據加載到數據框中,然后對其進行處理。 這是我的代碼(不包括導入庫):

    class Save(Data):
        def __init__(self, server, database, username, driver, group=None):
            super().__init__(server, database, username, driver)
            self.group = group

        def get_all_goods(self):
            goods_table = pd.read_sql_query(f''' SELECT [p_1], [p_2] 
                                  FROM [table] WHERE [group] = '{self.group}' ''',
                                  self.hndl)
            return goods_table

        def data_preprocessing(self):
            data_prepared = self.get_all_goods()
            data_prepared['desc'] = data_prepared[['p_1', 'p_2']].apply(lambda x: ' '.join(x), axis=1)
            return data_prepared

        @staticmethod
        def data_cleaning(str):
            words = []
            str = re.sub(r"(\w*(\.\w*))", ' ', str)
            str = re.sub(r"\d*\_\d*", ' ', str)
            for i in re.split('[;,.,\n,\s,:,-,+,(,),=,/,«,»,@,!,?,",_,*]',str):
                if len(i) > 1:
                    words.append(i)
            return words

        def data_morphy(self, text):
            morph = pymorphy2.MorphAnalyzer()
            tokens = [morph.parse(token)[0].normal_form for token in self.data_cleaning(text) if token != ' ']
            tokens = list(dict.fromkeys(tokens))
            text = ' '.join(tokens)
            return text

        def data_final(self):
            data_final = self.data_preprocessing()
            data_final['desc'] = data_final['desc'].apply(lambda x: self.data_morphy(x))
            return data_final

但是,當我運行代碼時,它無法完成其工作,我等待了半個小時,但代碼未執行。 但是方法get_all_goodsdata_preprocessing效果很好。 我在哪里弄錯了?

編輯:

現在,當我使用cls.data_final()時出現錯誤:

    Traceback (most recent call last):
  File "C:\Program Files\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-8-66905faafdf3>", line 103, in <module>
    cls.data_final()
  File "<ipython-input-8-66905faafdf3>", line 68, in data_final
    data_final['desc'] = data_final['desc'].apply(lambda x: self.data_morphy(x))
TypeError: 'method' object is not subscriptable

名稱data_final被共享為數據data_final的名稱和函數的名稱。 當嘗試將data_final['desc']用作熊貓數據data_final['desc'] ,代碼認為您正在嘗試調用data_final()方法。 這就是為什么您收到TypeError: 'method' object is not subscriptable

解決方案-將熊貓框架的名稱更改為非函數名稱的名稱,例如:

def data_final(self):
    dont_name_your_variables_the_same_as_your_functions = self.data_preprocessing()
    dont_name_your_variables_the_same_as_your_functions['desc'] = dont_name_your_variables_the_same_as_your_functions['desc'].apply(lambda x: self.data_morphy(x))
    return dont_name_your_variables_the_same_as_your_functions

:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM