如何在Python中循环为多个DataFrame运行回归分析
批量处理年度回归分析的实现方案
我来帮你搞定这个批量回归的需求,核心思路就是先把分散的DataFrame统一管理,再循环处理每个年份的模型,下面是具体步骤和代码:
步骤1:导入必要的库
import pandas as pd import statsmodels.api as sm
步骤2:整合所有年度DataFrame
手动逐个调用变量名太繁琐,我们可以通过年份范围生成变量名,再从全局命名空间中获取对应的DataFrame,存到字典里方便后续循环:
# 定义年份范围:2001到2016 years = range(2001, 2017) # 把每个年份的DataFrame存入字典,键为年份,值为对应的DataFrame df_dict = {year: globals()[f'CGdf_{year}'] for year in years}
这里的
globals()函数可以获取当前全局环境中的变量,通过字符串拼接f'CGdf_{year}'就能精准定位到每个年度的DataFrame。
步骤3:循环执行回归并保存结果
接下来我们遍历字典中的每个年份和DataFrame,构建回归模型TSR_YYYY ~ sector profit,并可以把每个模型的结果存起来方便后续查看:
# 定义一个字典来保存每个年份的回归结果 reg_results = {} for year, df in df_dict.items(): # 提取因变量和自变量:因变量是TSR_YYYY,自变量是sector profit y = df[f'TSR_{year}'] X = df['sector profit'] # 给自变量添加常数项(statsmodels默认不包含截距) X = sm.add_constant(X) # 处理缺失值(可选但推荐,避免回归报错) df_clean = pd.concat([y, X], axis=1).dropna() y_clean = df_clean[f'TSR_{year}'] X_clean = df_clean.drop(f'TSR_{year}', axis=1) # 构建并拟合OLS回归模型 model = sm.OLS(y_clean, X_clean).fit() # 保存结果到字典 reg_results[year] = model # 打印当前年份的回归摘要(可选,方便实时查看结果) print(f"===== {year}年回归结果 =====") print(model.summary())
如何查看单个年份的结果
如果之后想查看某一年的回归结果,直接从reg_results字典里取就行:
# 查看2005年的回归结果 print(reg_results[2005].summary()) # 提取某一年的系数 print("2005年回归系数:", reg_results[2005].params)
注意事项
- 如果你的
sector profit列名有特殊格式(比如下划线、大小写差异),代码里要严格对应,避免列名匹配错误。 - 缺失值处理是可选步骤,但如果数据里存在NaN,不处理的话
fit()方法会报错,所以建议加上dropna()。 - 如果需要把所有回归结果导出成表格,可以用
pd.concat把每个模型的参数合并成一个DataFrame:
# 把所有年份的回归系数合并成一个表格 coef_df = pd.DataFrame({year: res.params for year, res in reg_results.items()}).T print(coef_df)
内容的提问来源于stack exchange,提问作者user3021495
相关产品推荐
相关产品推荐

