pandas DataFrame无法转换导出为csv文件问题求助
代码错误点汇总
- 类实例化逻辑错误:未实例化
RawToCSV类就直接调用实例方法dataset_csv,且__init__构造方法要求传入path_和df两个参数,调用时仅传入了input_path参数,不符合参数要求 - 依赖导入缺失:代码中使用了
np.log2但未导入numpy库,运行会直接报错 - 核心处理逻辑未触发:
raw_file_processing是数据处理的核心方法,整个代码流程中从未调用该方法,导致self.cls、self.measurement_df等属性始终为空 - 变量作用域错误:
raw_file_processing中生成的df、cls均为局部变量,未赋值给类的实例属性,方法返回值也未被接收,处理结果直接丢失 - 业务逻辑错误:
- 类别提取逻辑错误:
cls_col = df.iloc[2]是取第三行全量数据,不是目标tile_num列,且该列已经被提前删除,无法提取到正确类别 - 列读取逻辑错误:
for col in df[9:]遍历的是列名字符串,调用col.readline()属于完全错误的用法,字符串没有该方法 - 归一化逻辑错误:
background取到的是空白列的列名字符串,直接用数值和字符串做除法运算会直接报错 - 数据拼接逻辑错误:
pd.concat(frames)默认按行拼接,要实现ID、类别、测量值按列对齐需要添加axis=1参数 - CSV导出未关闭索引:
to_csv默认会导出行索引,添加index=False即可避免输出多余的索引列
- 类别提取逻辑错误:
修复后可运行代码
import os import re import numpy as np import pandas as pd input_path = "../input_data/" class RawToCSV: def __init__(self, path_): self.path_ = path_ # 初始化存储所有文件处理结果的列表 self.all_data = [] def raw_file_processing(self): # 遍历path下所有子文件夹的csv文件 for root, dirs, files in os.walk(self.path_): for file in files: if not file.endswith(".csv"): continue file_path = os.path.join(root, file) df = pd.read_csv(file_path) # 拼接生成ID df["ID"] = df[['cell_id:cell_id', 'region:region', 'tile_num:tile_num']].apply( lambda row: '_'.join([str(each) for each in row]), axis=1) # 暂存类别列,再删除冗余列 cls_col = df["tile_num:tile_num"].copy() df = df.drop(columns=['cell_id:cell_id', 'region:region', 'tile_num:tile_num']) # 找空白列做归一化 background_cols = [col for col in df.columns if re.search(r"(Blank|Empty)$", col)] if not background_cols: continue background_val = df[background_cols].mean(axis=1) # 取测量列做归一化+对数变换 measure_cols = [col for col in df.columns if col not in background_cols] measure_df = df[measure_cols].div(background_val, axis=0).apply(np.log2) # 拼接单行数据:ID+类别+测量值 for idx in range(len(df)): row_data = {"ID": df.loc[idx, "ID"], "Class": cls_col[idx]} row_data.update(measure_df.loc[idx].to_dict()) self.all_data.append(row_data) def dataset_csv(self): # 先运行数据处理逻辑 self.raw_file_processing() # 转成DataFrame导出 dataset_df = pd.DataFrame(self.all_data) dataset_df.to_csv(r"../input_data/dataset.csv", index=False, encoding="utf-8-sig") return dataset_df # 正确实例化类再调用方法 processor = RawToCSV(input_path) result_df = processor.dataset_csv()
修复后代码会自动遍历目标目录下所有csv文件,处理后生成符合要求格式的dataset.csv,ID、Class列在前,后面跟着所有测量值列。
内容的提问来源于stack exchange,提问作者melololo
相关产品推荐
相关产品推荐

