解释一些python代码。访问不存在的列?

时间:2015-02-15 06:14:20

标签: python pandas dataframe

代码的来源是:https://github.com/quantopian/zipline/blob/master/zipline/examples/pairtrade.py

代码块是这样的:

def ols_transform(data, sid1, sid2):
   """Computes regression coefficient (slope and intercept)
   via Ordinary Least Squares between two SIDs.
   """
   p0 = data.price[sid1]
   p1 = sm.add_constant(data.price[sid2], prepend=True)
   slope, intercept = sm.OLS(p0, p1).fit().params

   return slope, intercept

数据框"数据"是由这个创建的:

data = load_from_yahoo(stocks=['PEP', 'KO'], indexes={},
                           start=start, end=end)

输出如下:

                          PEP     KO
Date                                   
2001-01-02 00:00:00+00:00  15.25   9.20
2001-01-03 00:00:00+00:00  16.19   9.54
2001-01-04 00:00:00+00:00  16.55   9.72
2001-01-05 00:00:00+00:00  16.29   9.67
2001-01-08 00:00:00+00:00  16.09   9.79
2001-01-09 00:00:00+00:00  15.74   9.70
2001-01-10 00:00:00+00:00  15.74   9.61
2001-01-11 00:00:00+00:00  15.80   9.88

我的问题是,这是如何工作的?

   p0 = data.price[sid1]:
   p1 = sm.add_constant(data.price[sid2], prepend=True) 

在最后一段代码中,'价格'未定义为列。我不确定为什么可以召唤它?它甚至不是数据框的名称。

是否与导入的包有关?或者我完全错过了什么?

1 个答案:

答案 0 :(得分:2)

这是由于函数的前一行(@batchtransform):https://github.com/quantopian/zipline/blob/master/zipline/examples/pairtrade.py#L28有些神奇。有关其工作原理的更完整说明,请参阅“批量转换”下的Quantopian帮助文档https://www.quantopian.com/help

但是,请注意,这是一个旧的示例,可以使用较新的历史记录()进行重构,以实现相同但更快速和更清晰的历史记录。帮助文档还包含对此的描述。