如何创建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
相关产品推荐
相关产品推荐

