Pandas for循环拼接迭代结果仅输出最后一次值如何解决
问题根因
- 缩进错误:总表拼接逻辑写在for循环外部,循环执行过程中每次迭代都会覆盖重写单ticker结果变量
df_con,循环结束后该变量仅保留最后一个标的的计算值,最终拼接自然只输出最后一个ticker的结果。 - 结构逻辑错误:预期输出为每列对应1个ticker、共3行对应三个指标,但原有代码生成单ticker结果时统一用0作为行索引,且拼接方向和结构不匹配列对齐的要求,即使修正缩进也会出现行索引混乱、数据错位的问题。
修正后代码
import pandas as pd import statsmodels.formula.api as smf def regression_stats(): # 初始化总表,提前设置3行对应的指标名作为行索引 total_df = pd.DataFrame(index=['beta', 'alpha', 'std_error']) for t in tickers: model = smf.ols(f'{t} ~ SP50', data=df1).fit() beta = model.params['SP50'] alpha = model.params['Intercept'] std_error = model.bse['Intercept'] # 直接给当前ticker赋值整列数据,无需循环内反复拼接 total_df[t] = [beta, alpha, std_error] # 如需导出文件放开下方注释即可 # total_df.to_csv('source/data/sp_regression.csv') print(total_df) return total_df
优化说明
- 提前初始化总表时直接设置三行的索引为
beta/alpha/std_error,和三类指标一一对应,从根源避免索引错位 - 移除循环内反复创建临时DataFrame、多次无效拼接的冗余逻辑,每次循环直接给总表新增一列,列名为当前ticker,列值按行索引顺序填入三个计算结果,运行效率远高于循环内反复concat的写法
- 所有ticker的计算结果都会在循环内写入总表,最终输出结构完全匹配预期:共500列对应500个股票代码,3行依次为beta、alpha、标准误指标值。
内容的提问来源于stack exchange,提问作者Trevor Seibert
相关产品推荐
相关产品推荐

