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

如何在无需后续按名称访问的情况下,为任意数量的Pandas DataFrame批量应用同一函数?

如何在无需后续按名称访问的情况下,为任意数量的Pandas DataFrame批量应用同一函数?

嘿,这个问题很常见,尤其是当你处理动态生成的DataFrame时!我来给你几个实用的方案,完全不用之后逐个去索引或按名称访问每个处理后的结果:

  • 第一步:先把所有目标DataFrame收集到可迭代对象中
    如果你已经有了df1、df2……dfn这些单独命名的DataFrame,首先得把它们集中到一个列表里。最便捷的方式是从全局/局部命名空间里筛选出符合命名规则的DataFrame:

    import pandas as pd
    
    # 筛选所有以"df"开头且是Pandas DataFrame类型的变量
    df_collection = [var for name, var in globals().items() 
                     if name.startswith('df') and isinstance(var, pd.DataFrame)]
    

    当然,如果你的DataFrame命名规则不一样,只要调整startswith里的字符串就行,比如如果是data_1、data_2,就改成name.startswith('data_')。

  • 第二步:批量应用你的函数
    接下来就可以对整个列表批量处理了,推荐用列表推导式(比循环更简洁),或者map函数:
    先定义你要应用的处理函数,比如:

    def my_processing_func(df):
        # 这里写你的具体处理逻辑,比如新增列、过滤数据、计算统计值等
        df['processed_col'] = df['original_col'].apply(lambda x: x * 3)
        # 如果是需要返回处理后的DataFrame,记得加return
        return df
    

    然后批量处理:

    # 得到所有处理后的DataFrame组成的列表
    processed_dfs = [my_processing_func(df) for df in df_collection]
    

    这样你就有了所有处理后的结果集合,后续如果需要批量操作(比如合并所有处理后的DataFrame),直接对processed_dfs操作就行,完全不用逐个访问df1、df2这些单独的变量。

  • 备选:原地修改(谨慎使用)
    如果你不需要保留原DataFrame,想直接修改原对象,可以用循环原地操作:

    for df in df_collection:
        # 原地修改,比如删除不需要的列
        df.drop(columns=['unnecessary_col'], inplace=True)
    

    注意:这种方式会直接改变原来的df1、df2等变量,没有返回新的对象,适合不需要保留原始数据的场景。

  • 额外小技巧:如果之后偶尔需要按原名称访问
    要是你之后偶尔需要对应原名称找处理后的DataFrame,可以用字典来存储:

    processed_df_map = {name: my_processing_func(var) 
                        for name, var in globals().items() 
                        if name.startswith('df') and isinstance(var, pd.DataFrame)}
    

    之后要找df3的处理结果,就用processed_df_map['df3'],但这只是备选,完全不影响你批量处理的需求。

备注:内容来源于stack exchange,提问作者Elis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:08:07