如何在pandas数据框的列上迭代以运行回归

2024-04-20 05:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我确信这很简单,但是作为python的新手,我很难理解如何在数据帧中迭代变量并对每个变量运行回归。

我要做的是:

all_data = {}
for ticker in ['FIUIX', 'FSAIX', 'FSAVX', 'FSTMX']:
    all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2010', '1/1/2015')

prices = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})  
returns = prices.pct_change()

我知道我可以这样做:

regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()

但是假设我想对数据帧中的每一列都这样做。特别是,我想在FSTMX上回归FIUIX,然后在FSTMX上回归FSAIX,然后在FSTMX上回归FSAVX。每次回归之后,我都要存储残差。

我试过以下各种版本,但一定是语法错误:

resids = {}
for k in returns.keys():
    reg = sm.OLS(returns[k],returns.FSTMX).fit()
    resids[k] = reg.resid

我认为问题是我不知道如何按键引用returns列,所以returns[k]可能是错误的。

任何关于最佳方法的指导都将不胜感激。也许我错过了一个常见的熊猫方法。


Tags: 数据infordataticallreturnsprices
3条回答
for column in df:
    print(df[column])

您可以使用iteritems()

for name, values in df.iteritems():
    print('{name}: {value}'.format(name=name, value=values[0]))

这个答案是遍历DF中的所有列。

df.columns给出一个列表,其中包含DF中所有列的名称。现在,如果要遍历所有列,这就不是很有帮助了。但是当您只想在您选择的列上迭代时,它很有用。

我们可以根据需要使用Python的列表切片轻松地对df.columns进行切片。例如,要遍历除第一列以外的所有列,我们可以执行以下操作:

for column in df.columns[1:]:
    print(df[column])

类似于以相反的顺序遍历所有列,我们可以执行以下操作:

for column in df.columns[::-1]:
    print(df[column])

使用这种技术,我们可以用很多很酷的方法遍历所有列。还要记住,可以使用以下方法轻松获取所有列的索引:

for ind, column in enumerate(df.columns):
    print(ind, column)

相关问题 更多 >