itz*_*tzy 162 python pandas statsmodels
我确信这很简单,但作为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()
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行这样的回归:
regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
Run Code Online (Sandbox Code Playgroud)
但是假设我想为数据框中的每一列执行此操作.特别是,我想在FSTMX上退回FIUIX,然后在FSTMX上退回FSAIX,然后在FSTMX上退回FSAVX.在每次回归之后我想存储残差.
我已经尝试了以下各种版本,但我必须得到错误的语法:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Run Code Online (Sandbox Code Playgroud)
我认为问题是我不知道如何按键引用返回列,所以returns[k]
可能是错误的.
任何关于最佳方法的指导都将非常感激.也许我缺少一种常见的熊猫方法.
The*_*Cat 290
for column in df:
print(df[column])
Run Code Online (Sandbox Code Playgroud)
mdh*_*mdh 59
你可以使用iteritems()
:
for name, values in df.iteritems():
print('{name}: {value}'.format(name=name, value=values[0]))
Run Code Online (Sandbox Code Playgroud)
Abh*_*pta 29
这个答案是迭代选定的列以及DF中的所有列.
df.columns
给出一个包含DF中所有列名称的列表.现在,如果要迭代所有列,这不是很有帮助.但是当你想要迭代你选择的列时,它会派上用场.
我们可以根据需要轻松地使用Python的列表切片来切片df.columns.例如,要迭代所有列而不是第一个列,我们可以这样做:
for column in df.columns[1:]:
print(df[column])
Run Code Online (Sandbox Code Playgroud)
类似于以相反的顺序迭代所有列,我们可以这样做:
for column in df.columns[::-1]:
print(df[column])
Run Code Online (Sandbox Code Playgroud)
我们可以使用这种技术以很多很酷的方式迭代所有列.还要记住,您可以使用以下方法轻松获取所有列的索引:
for ind, column in enumerate(df.columns):
print(ind, column)
Run Code Online (Sandbox Code Playgroud)
JAB*_*JAB 21
您可以使用位置索引数据框列ix
.
df1.ix[:,1]
Run Code Online (Sandbox Code Playgroud)
例如,返回第一列.(0将是索引)
df1.ix[0,]
Run Code Online (Sandbox Code Playgroud)
这将返回第一行.
df1.ix[:,1]
Run Code Online (Sandbox Code Playgroud)
这将是第0行和第1列交叉处的值:
df1.ix[0,1]
Run Code Online (Sandbox Code Playgroud)
等等.因此,您可以enumerate()
returns.keys():
使用该数字来索引数据帧.
使用列表理解,您可以获得所有列名称(标题):
[column for column in df]
解决方法是对DataFrame
行进行转置和迭代.
for column_name, column in df.transpose().iterrows():
print column_name
Run Code Online (Sandbox Code Playgroud)
根据接受的答案,如果还需要与每列对应的索引:
for i, column in enumerate(df):
print i, df[column]
Run Code Online (Sandbox Code Playgroud)
上面的df[column]
类型是Series
,可以简单地转换成numpy
ndarray
s:
for i, column in enumerate(df):
print i, np.asarray(df[column])
Run Code Online (Sandbox Code Playgroud)