我在Python中使用Pandas编写了以下代码:

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, FSAIX和FSAVX),并存储每次回归的残差。

我尝试过以下几种方法,但没有一种能达到预期的效果:

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

代码的返回[k]部分有问题吗?如何使用k值访问列?或者还有更简单的方法吗?


当前回答

根据已接受的答案,如果还需要与每列对应的索引:

for i, column in enumerate(df):
    print i, df[column]

上面的df[column]类型是Series,它可以简单地转换为numpy ndarray:

for i, column in enumerate(df):
    print i, np.asarray(df[column])

其他回答

for column in df:
    print(df[column])

这个答案是遍历选定的列以及DF中的所有列。

df。columns提供了一个包含DF中所有列的名称的列表。如果你想遍历所有列,这就没什么用了。但是当您只想迭代所选择的列时,它就会派上用场。

我们可以很容易地使用Python的列表切片来切片df。根据我们的需要列。例如,要遍历除第一列外的所有列,我们可以这样做:

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)

大多数答案都是通过列名,而不是直接迭代列。如果有多个具有相同名称的列,也会出现问题。如果你想迭代列,我建议:

for series in (df.iloc[:,i] for i in range(df.shape[1])):
   ...

使用列表理解,你可以得到所有的列名(标题):

[用于df中的列]

你可以使用ix根据数据帧列的位置建立索引。

df1.ix[:,1]

例如,这将返回第一列。(0是索引)

df1.ix[0,]

这将返回第一行。

df1.ix[:,1]

这将是第0行和第1列的交点:

df1.ix[0,1]

等等。因此,您可以enumerate() returns.keys():并使用该数字来索引数据帧。