Python Pandas:如何批量对多个相似DataFrame执行相同操作?
批量处理同构DataFrame的Pandas风格方案
这种批量处理结构一致的DataFrame的需求非常普遍,下面几个方案既符合Pandas的设计理念,又能让你的代码更整洁、可维护:
1. 用字典/列表统一管理,批量推导处理
首先把分散的DataFrame集中到一个字典(推荐,能保留每个DF的名称)或者列表里,然后用推导式一次性完成处理,避免重复写相同代码:
# 假设你有df1, df2, ..., dfN这些DataFrame,先存入字典 dfs = {"df1": df1, "df2": df2, "df3": df3, "dfN": dfN} # 定义统一的列名映射规则 rename_map = { "original_col_a": "new_col_a", "original_col_b": "new_col_b", "original_col_c": "new_col_c" } # 批量处理,生成新的处理后DataFrame字典 processed_dfs = {name: df.rename(columns=rename_map) for name, df in dfs.items()} # 如果需要覆盖原来的单个变量(不推荐,建议保留原数据) for name, df in processed_dfs.items(): globals()[name] = df
2. 封装自定义处理函数,扩展性更强
如果后续还要添加更多统一操作(比如缺失值填充、类型转换、特征工程),把所有处理逻辑封装成一个函数,再批量应用会更清晰:
def standardize_df(df, rename_map): # 第一步:重命名列 df_clean = df.rename(columns=rename_map) # 可以在这里添加任意统一处理步骤,比如: df_clean["new_col_a"] = df_clean["new_col_a"].astype(float) df_clean = df_clean.dropna(subset=["new_col_b"]) df_clean["new_col_c"] = df_clean["new_col_c"].str.strip() return df_clean # 同样基于字典批量处理 rename_map = {"original_col_a": "new_col_a", ...} processed_dfs = {name: standardize_df(df, rename_map) for name, df in dfs.items()}
3. 读取阶段直接处理(如果是文件来源)
如果这些DataFrame是从外部文件(CSV/Excel等)读取的,建议在读取时就完成统一处理,减少中间步骤:
import pandas as pd from glob import glob def load_and_process(file_path): # 读取文件 df = pd.read_csv(file_path) # 直接应用重命名和其他处理 rename_map = {"original_col_a": "new_col_a", ...} return df.rename(columns=rename_map) # 批量读取指定目录下的所有CSV文件并处理 file_list = glob("./data/*.csv") processed_dfs = {file.split("/")[-1]: load_and_process(file) for file in file_list}
关键注意点
- 尽量避免使用
inplace=True:Pandas推荐返回新的DataFrame,原地修改容易引发不可预期的副作用,也不利于调试。 - 用容器(字典/列表)管理多DataFrame,比单独的变量更易维护,遍历、筛选、批量操作都更方便。
- 遵循DRY(Don't Repeat Yourself)原则,把重复逻辑封装,后续修改只需要改一处。
内容的提问来源于stack exchange,提问作者user4662234
相关产品推荐
相关产品推荐

