实例化DataProcesser触发AttributeError:'DataFrame'无seek属性如何解决
报错原因
你传入DataProcesser初始化方法的第一个参数类型错误:
DataProcesser的__init__方法第一个入参archive_path设计为接收zip压缩包的文件路径字符串,或者具有seek方法的文件类对象- 你在循环中调用
DataProcesser(data_file, datatable=False)时,传的data_file是pd.read_csv()返回的DataFrame对象 - 初始化方法内部直接将该对象传给
zipfile.ZipFile构造函数,ZipFile会尝试调用传入对象的seek方法操作文件,而DataFrame没有该方法,因此抛出AttributeError。
另外你的代码还有两处基础逻辑错误:
raw_file_processing方法缩进错误,写在了__init__方法内部,属于局部函数,类实例无法正常调用- 调用逻辑颠倒:
DataProcesser的read_archive方法是用来读取已经打包好的、包含三个目标csv的zip包,而你现在直接把未处理的原始csv读成DataFrame传入类,不符合设计逻辑。
修复方案
1. 修正代码基础错误
- 调整
raw_file_processing方法的缩进,让它和dataset_csv、classes_csv等方法同级,成为类的公共方法 - 修正其他语法错误:
classes_csv方法里的drop_duplicate改为drop_duplicateszip_files方法里的ZipFile要补充前缀zipfile.,或者在导入时添加from zipfile import ZipFileraw_file_processing方法内所有直接调用archive_path的地方改为self.archive_path
2. 调整调用逻辑
你需要按照「处理原始数据→生成目标csv→打包zip→读取zip」的流程调用,删除原有循环里把DataFrame传入DataProcesser的错误代码,替换为如下逻辑即可:
input_path = "//wsl$/Ubuntu-20.04/home/melissachua/CODEX/input_data" # 第一步:处理原始数据生成zip包 # 传入原始数据目录路径,关闭自动读取zip processor = DataProcesser(input_path, read_on_init=False) # 依次调用四个方法生成csv processor.raw_file_processing() processor.dataset_csv() processor.classes_csv() processor.idset_csv() # 打包生成data.zip processor.zip_files() # 第二步:读取生成好的zip包 processor = DataProcesser("./data.zip", datatable=False)
内容的提问来源于stack exchange,提问作者melololo
相关产品推荐
相关产品推荐

