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

如何将多列迭代的OLS回归打印结果转换为Pandas DataFrame?

从OLS迭代输出创建Pandas DataFrame的方法

场景说明

你正在循环对DataFrame中的s1、s2列做基准OLS回归,每次打印回归的系数(params)、t值(tvalues)、p值(pvalues),现在需要把这些零散的输出整合到一个结构化的Pandas DataFrame中,方便后续分析。

最优解决方案:直接从回归结果收集数据(推荐)

不要先打印再转换,直接在循环中收集每个回归的结果,再生成DataFrame,这样更高效且不易出错:

import pandas as pd
import statsmodels.api as sm
from statsmodels import regression

# 初始化空列表存储每个回归的结果
results_list = []

for i in range(2):
    target_col = f"s{i+1}"
    # 拟合OLS模型
    model = regression.linear_model.OLS(
        df[[target_col]], 
        sm.add_constant(df[["benchmark"]])
    ).fit()
    # 将当前回归的关键指标整理为字典
    result_row = {
        "目标列": target_col,
        "常数项系数": model.params["const"],
        "基准项系数": model.params["benchmark"],
        "常数项t值": model.tvalues["const"],
        "基准项t值": model.tvalues["benchmark"],
        "常数项p值": model.pvalues["const"],
        "基准项p值": model.pvalues["benchmark"]
    }
    results_list.append(result_row)

# 转换为DataFrame
final_df = pd.DataFrame(results_list)
print(final_df)

运行后会得到如下结构化的DataFrame:

目标列常数项系数基准项系数常数项t值基准项t值常数项p值基准项p值
s10.0189590.7704733.5864518.5739764.329e-044.732e-15
s20.0181920.7789063.1801028.0095411.737e-031.451e-13

备选方案:从已打印的文本结果创建DataFrame

如果已经有了打印的文本输出,也可以通过文本解析生成DataFrame:

# 把你的打印结果复制到这个字符串中
output_text = """const        0.018959
benchmark    0.770473
dtype: float64
const        3.586451
benchmark    8.573976
dtype: float64
const        4.329121e-04
benchmark    4.732058e-15
dtype: float64
const        0.018192
benchmark    0.778906
dtype: float64
const        3.180102
benchmark    8.009541
dtype: float64
const        1.736846e-03
benchmark    1.450519e-13
dtype: float64"""

# 清理文本:去掉dtype行,保留有效数据
clean_lines = [line.strip() for line in output_text.split("\n") if not line.startswith("dtype")]
# 每6行对应一个回归的params、tvalues、pvalues(每组2行,共3组)
parsed_data = []
for idx in range(0, len(clean_lines), 6):
    parsed_data.append({
        "目标列": f"s{(idx//6)+1}",
        "常数项系数": float(clean_lines[idx].split()[-1]),
        "基准项系数": float(clean_lines[idx+1].split()[-1]),
        "常数项t值": float(clean_lines[idx+2].split()[-1]),
        "基准项t值": float(clean_lines[idx+3].split()[-1]),
        "常数项p值": float(clean_lines[idx+4].split()[-1]),
        "基准项p值": float(clean_lines[idx+5].split()[-1])
    })

final_df = pd.DataFrame(parsed_data)
print(final_df)

相关参考资料

  • Pandas官方文档中pd.DataFrame()的用法说明,涵盖从字典列表、Series等多种数据源创建DataFrame的方法
  • Statsmodels官方文档中RegressionResults对象的属性说明,包括params、tvalues、pvalues等回归结果属性的详细介绍

内容的提问来源于stack exchange,提问作者stvlam22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:15:24