You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:09:02