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

如何创建Pandas数据清洗格式化类处理多CSV文件?

当然可以!这种封装方式非常适合批量重复的数据清洗流程,下面给你一个落地的实现方案:

首先,我们可以把这些数据处理函数封装成一个继承自pandas.DataFrame的类,这样实例化后直接得到处理好的DataFrame,完全符合你设想的使用方式。同时保留参数灵活性,方便针对不同文件调整处理列。

完整代码实现

import pandas as pd
import re

class ModifyDataFrame(pd.DataFrame):
    def __init__(self, original_df, whitespace_cols=None, date_cols=None):
        # 复制原始数据,避免污染原DataFrame
        cleaned_df = original_df.copy()
        
        # 给参数设置默认值,未传参时不执行对应处理
        self.whitespace_cols = whitespace_cols or []
        self.date_cols = date_cols or []
        
        # 按顺序执行所有清洗步骤
        self._trim_extra_whitespace(cleaned_df)
        self._convert_date_columns_to_str(cleaned_df)
        self._parse_username_from_column(cleaned_df)
        
        # 初始化父类DataFrame,传入处理后的数据
        super().__init__(cleaned_df)
    
    def _trim_extra_whitespace(self, df):
        """移除指定列文本中的首尾空格及中间多余空格"""
        for col in self.whitespace_cols:
            if col not in df.columns:
                continue
            df[col] = df[col].str.strip()
            df[col] = df[col].str.replace(r'\s+', ' ', regex=True)
    
    def _convert_date_columns_to_str(self, df):
        """将指定日期列转换为字符串类型"""
        for col in self.date_cols:
            if col not in df.columns:
                continue
            df[col] = df[col].astype(str)
    
    def _parse_username_from_column(self, df):
        """从TEXT列提取用户名(示例正则,可根据实际规则调整)"""
        if 'TEXT' not in df.columns:
            return
        # 这里假设用户名是@开头的字母数字组合,按需修改正则
        df['username'] = df['TEXT'].str.extract(r'@(\w+)', expand=False)
    
    @classmethod
    def from_csv(cls, csv_path, whitespace_cols=None, date_cols=None):
        """直接从CSV文件读取并完成清洗的快捷方法"""
        original_df = pd.read_csv(csv_path)
        return cls(original_df, whitespace_cols, date_cols)

使用示例

方式1:传入已有的原始DataFrame

# 先读取原始数据
original_df = pd.read_csv('raw_data.csv')

# 实例化类,指定需要处理的列
cleaned_df = ModifyDataFrame(
    original_df,
    whitespace_cols=['description', 'username_raw'],
    date_cols=['register_date', 'login_time']
)

# 直接使用处理后的DataFrame
cleaned_df.to_csv('cleaned_data.csv', index=False)

方式2:直接从CSV文件创建处理(更适合批量操作)

# 批量处理多个CSV文件
file_paths = ['file1.csv', 'file2.csv', 'file3.csv']
for path in file_paths:
    cleaned_df = ModifyDataFrame.from_csv(
        path,
        whitespace_cols=['content'],
        date_cols=['create_at']
    )
    cleaned_df.to_csv(f'cleaned_{path}', index=False)

方案优势

  • 封装性强:所有清洗逻辑集中在类里,不用每次重复调用多个函数
  • 兼容原生操作:类继承自DataFrame,处理后的实例可以直接使用所有pandas方法
  • 安全无污染:初始化时复制原数据,不会修改原始文件/数据
  • 灵活可调:通过参数指定需要处理的列,适配不同文件的结构差异

内容的提问来源于stack exchange,提问作者C O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:32:06