如何更简洁地将自定义SMA函数应用于上百个DataFrame?
批量应用SMA函数到多个DataFrame的方案
方案1:收集现有DataFrame到列表后批量处理
如果已经存在df1到df100这些单独命名的DataFrame,可以先将它们统一收集到列表中,再用列表推导式批量处理:
import pandas as pd # 从全局变量中筛选出所有以df开头的DataFrame dfs = [v for k, v in globals().items() if k.startswith('df') and isinstance(v, pd.DataFrame)] # 批量应用sma函数,得到处理后的DataFrame列表 processed_dfs = [sma(df, 40) for df in dfs]
方案2:用字典存储保留原名称
如果需要保留每个DataFrame的原始命名(比如区分处理后的结果和原数据),可以用字典来管理:
# 收集所有df开头的DataFrame到字典,键为变量名,值为DataFrame对象 df_dict = {k: v for k, v in globals().items() if k.startswith('df') and isinstance(v, pd.DataFrame)} # 批量处理,生成处理后的字典 processed_df_dict = {name: sma(df, 40) for name, df in df_dict.items()} # 若要直接覆盖原变量(谨慎使用,会丢失原始数据) for name, df in df_dict.items(): globals()[name] = sma(df, 40)
更优实践:从初始化阶段就用容器管理
建议后续创建DataFrame时,直接用列表或字典存储,避免单独命名df1到df100,从根源简化批量操作:
# 示例:初始化100个DataFrame并存储到列表 dfs = [] for _ in range(100): # 替换为你的DataFrame创建逻辑 new_df = pd.DataFrame(...) dfs.append(new_df) # 直接批量处理 processed_dfs = [sma(df, 40) for df in dfs]
注意:使用
globals()筛选时,要确保没有其他以df开头的非DataFrame变量,否则会混入无关数据,可通过isinstance(v, pd.DataFrame)严格过滤。
内容的提问来源于stack exchange,提问作者stvlam22
相关产品推荐
相关产品推荐

