【发布时间】:2021-07-21 14:11:32
【问题描述】:
我有一个读取数据帧的类,然后是另一个处理该数据帧的类。处理类中的函数应逐步应用于同一数据帧,以形成最终的数据帧,然后将其保存为 csv 文件。
from pydantic import BaseModel
from config import DATA_REPO
import pandas as pd
import os
class PandaDataFrame(BaseModel):
data: pd.DataFrame
class Config:
arbitrary_types_allowed = True
class Directory(BaseModel):
data_directory: str
class DataToPandaReader(object):
def csv_file_reader(self, directory: Directory):
directory = directory.data_directory
for file in os.listdir(directory):
if file.endswith('.csv'):
return pd.read_csv(os.path.join(directory, file))
class DataProcessor(object):
def remove_punctuation(self, my_: PandaDataFrame):
my_data_to_process = my_.data
for col in my_data_to_process:
if any(word in col for word in ['example', 'text', 'Answer']):
my_data_to_process = my_data_to_process[col].str.replace('[^\w\s]', '', regex=True)
return add_number_column(my_data_to_process)
def add_number_column(self, my_: PandaDataFrame):
my_data_to_process = my_.data
my_data_to_process['sentence_number'] = range(len(my_data_to_process))
return save_final_dataframe(my_data_to_process)
def save_final_dataframe(self, my_:PandaDataFrame):
my_data_to_process = my_.data
return my_data_to_process.to_csv('final_data.csv')
def parse_data_process(directory_to_csv_file):
toprocess = DataProcessor()
toprocess.save_final_dataframe(directory_to_csv_file)
toprocess.remove_punctuation(directory_to_csv_file)
toprocess.add_number_column(directory_to_csv_file)
return toprocess
if __name__ == '__main__':
parse_data_process(PandaDataFrame(data= DataToPandaReader().csv_file_reader(Directory(data_directory = os.path.join(DATA_REPO, 'input_data')))))
现在,例如要实例化 DataProcessor 类中的第一个函数,我将执行以下操作
DataProcessor().remove_punctuation(PandaDataFrame(data= DataToPandaReader().csv_file_reader(Directory(data_directory = os.path.join(DATA_REPO, 'input_data')))))
但我的意图是在 DataProcessor 类中逐步运行所有这些函数,因此 save_final_dataset 函数将保存已删除标点符号并具有数字列的数据帧。
更新:
按照给出的答案,我进行了这些更改,但得到了函数未知的错误。
def parse_data_process(directory_to_csv_file):
toprocess = DataProcessor()
toprocess.save_final_dataframe(directory_to_csv_file)
toprocess.remove_punctuation(directory_to_csv_file)
toprocess.add_number_column(directory_to_csv_file)
return toprocess
if __name__ == '__main__':
parse_data_process(PandaDataFrame(data= DataToPandaReader().csv_file_reader(Directory(data_directory = os.path.join(DATA_REPO, 'input_data')))))
【问题讨论】:
-
我们需要查看您的完整代码以了解此处的问题。
-
这是完整的代码,我只是将更新部分的部分添加到我在这里发布的原始代码中
-
def parse_data_process(directory_to_csv_file): toprocess = DataProcessor() return toprocess.remove_punctuation(directory_to_csv_file) 这就是你所需要的,因为 remove_punctuation 以正确的顺序调用其他函数
-
非常感谢,我改了def parse_data_process,但还是报错:NameError: name 'add_number_column' is not defined
-
我错过了你将你的函数放在一个类中的事实(我认为没有必要)。因此,解决方案是使用“self”来限定函数调用。
标签: python pandas function class