通过字符串变量访问pandas DataFrame的列

时间:2015-01-20 22:56:12

标签: python pandas statsmodels

我已经设置了一个小函数,它接受了一个pandas DataFrame和一些参数,然后尝试使用statsmodels创建一个OLS回归。它的设计允许我从循环中调用它,使用一些简单的代码运行许多不同的回归。不幸的是,它不起作用,我很欣赏一些关于我需要做些什么才能让它发挥作用的指导。这是功能:

def regressReturns(rawData, predictor, horizon): x = rawData.eval(predictor) x = sm.add_constant(x) y = rawData.eval(str(horizon) + '_Yr_Return') results = sm.OLS(y,x).fit() return results.params

如果我从循环中调用它,我只会得到语法错误:

for rh in retunHorizons: regressReturns(rawData,'Earnings_Yield', rh)

我做错了什么?此外,我是一个熊猫新手,所以一个例子和一个解释将非常感激。

预先感谢您的协助。

Thomas Philips

2 个答案:

答案 0 :(得分:1)

我假设rawData是您的DataFrame,而您在evals中拥有的是您尝试访问的列的名称。如果是这种情况,以下内容将起作用:

x = rawData[predictor]
y = rawData[str(horizon) + '_Yr_Return']

可以使用as属性和dict来访问列。第一种方法更简洁,但如果你想将变量用作列名,第二种方法会更灵活。

答案 1 :(得分:0)

您可以直接使用pandas进行OLS:

from pandas.stats.api import ols

def regressReturns(rawData, predictor, horizon):
    rawData.dropna(inplace=True)
    results = ols(y=rawData[str(horizon) + '_Yr_Return'] ,
                  x=rawData[predictor])
    return res.sm_ols.params