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

Python类实例化触发TypeError: __init__()缺少必填位置参数'df'问题

错误原因
  • 直接报错是因为RawToCSV类的构造方法__init__定义了两个必填位置参数path_和df,你实例化时raw = RawToCSV(input_path)仅传入了1个参数,缺少df参数。
  • 代码还存在多处逻辑缺陷,会导致后续运行继续报错,统一修复如下:
修复要点
  1. 调整构造方法逻辑:df是在raw_file_processing方法中生成的,不需要初始化时传入,移除__init__的df参数,默认初始化self.df为None即可
  2. 修正实例属性赋值:raw_file_processing中生成的cls要赋值给实例属性self.cls,否则dataset_csv方法无法读取该变量
  3. 修正方法调用:类中定义的生成CSV方法名为dataset_csv,不是data_csv,且该方法是实例方法,不需要额外传input_path参数
  4. 修复拼接逻辑:pd.concat默认按行拼接,你需要按列拼接多组数据,要加axis=1参数
  5. 临时注释测量值处理的错误逻辑:原代码中col是列名字符串,调用readline()会触发类型错误,这部分业务逻辑你可以根据实际需求后续自行调整
修复后完整代码
import re
import pandas as pd
import os
import numpy as np

input_path = "../input_data"


class RawToCSV:

    def __init__(self, path_):
        self.measurement_df = None
        self.cls = None
        self.path_ = path_
        self.df = None

    def raw_file_processing(self):
        # 直接用实例初始化时传入的路径,不需要重复传参
        for root, dirs, files in os.walk(self.path_):
            for file in files:
                with open(os.path.join(root, file), "r") as data:
                    self.df = pd.read_csv(data)

                    # 'Class' refers to the independent variable
                    cls_info = self.df.iloc[2]

                    # Dummy-code the classes
                    cls = pd.get_dummies(cls_info)
                    # 赋值给实例属性,供其他方法调用
                    self.cls = cls

                    # Create the ID series by concatenating columns 1-3
                    self.df = self.df.assign(
                        ID=self.df[['cell_id:cell_id', 'region:region', 'tile_num:tile_num']].apply(
                            lambda row: '_'.join([str(each) for each in row]), axis=1))
                    self.df = self.df.drop(columns=['cell_id:cell_id', 'region:region', 'tile_num:tile_num'])

                    # 以下测量值处理逻辑存在语法错误,暂时注释,你可自行调整实现
                    # # Obtain measurement info
                    # # Normalize data against blank/empty columns
                    # # log-transform the data
                    # for col in self.df.columns[9:]:
                    #     if re.findall(r"Blank|Empty", col):
                    #         background = self.df[col].values
                    #     else:
                    #         line = self.df[col].values
                    #         norm_data = line / background
                    #         self.measurement_df = pd.DataFrame(np.log2(norm_data), columns=[col])

        return self.df["ID"], self.cls, self.measurement_df

    def dataset_csv(self):
        """Col 1: ID
        Col 2: class
        Col 3-n: measurements"""
        ids = self.df["ID"]
        id_col = ids.to_frame()

        cls_col = self.cls.to_frame()
        frames = [id_col, cls_col, self.measurement_df]
        # 按列拼接多组数据
        dataset_df = pd.concat(frames, axis=1)
        # 直接写入文件,关闭索引输出
        dataset_df.to_csv("../input_data/dataset.csv", index=False)

        return dataset_df

if __name__ == "__main__":
    raw = RawToCSV(input_path)
    three_tuple = raw.raw_file_processing()
    dataset = raw.dataset_csv()

内容的提问来源于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:54:03