存储不同长度回归系数数组到Pandas Series时报错如何解决?
问题原因
这个ValueError: setting an array element with a sequence报错的核心原因是:你初始化的tempS默认dtype不是object类型,pandas会尝试将你赋值的不同长度numpy数组做自动广播匹配,长度不匹配时就会触发报错。
解决方案
方案1:初始化时指定dtype为object
直接修改Series初始化代码,明确指定dtype为object,即可支持存储任意长度的数组对象,原有循环赋值逻辑无需改动:
# 修改初始化代码 tempS = pd.Series(index = range(len(temp)), dtype=object) ...... # for loop over i model = linear_model.OLS(y, x) results = model.fit() tempS[i] = results.params.values
方案2:先存列表再转Series(性能更优,适合大样本循环场景)
逐次给Series赋值的性能较低,你可以先把所有回归结果存到普通Python列表中,循环结束后一次性生成Series,pandas会自动匹配object dtype:
params_list = [] ...... # for loop over i model = linear_model.OLS(y, x) results = model.fit() params_list.append(results.params.values) # 循环结束后生成Series tempS = pd.Series(params_list, index=range(len(temp)))
补充说明
生成的Series每个元素都是对应时间点的回归系数数组,可直接按索引取值调用,例如tempS[5]即可取出第6个时间点的系数数组。
内容的提问来源于stack exchange,提问作者Jasper C.
相关产品推荐
相关产品推荐

