python - 如何正确应用类方法?
问题描述
我描述了一个类,它将数据从服务器加载到数据框中,然后对其进行处理。这是我的代码(不包括导入库):
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_goods和data_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['desc']
用作熊猫数据框时,代码认为您正在尝试调用该data_final()
方法。这就是为什么你得到TypeError: 'method' object is not subscriptable
解决方案 - 将您的 pandas 框架的名称更改为不是函数名称的名称,例如:
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
:)
推荐阅读
- gnuplot - 对于具有大量数据的小图,gnuplot 中的线条样式变得不清楚
- r - 使用纬度和经度确定一条线的中间
- javascript - 如何从 Svelte 中的路由数组生成 sitemap.xml
- swiftui - ForEach 具有动态与静态范围
- jakarta-ee - 在 JAX-RS 中使用 Multipart/Form-Data 的实现方式无关
- php - 如何通过我的插件页面运行功能并在同一页面上打印结果
- javascript - 如何使用 VenoBox 显示 Django 页面?
- keras - 深度学习早期停止循环中的回调奇怪行为
- aws-lambda - 为什么 Lambda 在 VPC 中配置,与 ec2 一样,无法向实例内的游牧客户端发送 api 请求?
- python-3.x - 如何使用 Python 在现有 AVRO 文件中追加数据