我有一个这样的数据框:

                   YAU        OTBL         HLE
2009-03-08         nan         nan         nan
2009-03-09  1.59904743  1.66397210  1.67345829
2009-03-10 -0.37065629 -0.36541822 -0.36015840
2009-03-11 -0.41055669  0.60004777  0.00536958


这是我的职责

def get_covariance_returns(returns):
   return np.cov(returns.values)


return参数是每个报价和日期的DataFrame Return。
输出是二维Ndarray返回的协方差。

运行代码时,我有:

AssertionError: Wrong shape for output returns_covariance. Got (4, 4), expected (3, 3)


现在,我像这样修改了我的功能:

def get_covariance_returns(returns):
    return np.cov(returns.values, rowvar=False)


我的结果是:

OUTPUT returns_covariance:
[[ nan  nan  nan]
 [ nan  nan  nan]
 [ nan  nan  nan]]


请注意,预期输出为:

EXPECTED OUTPUT FOR returns_covariance:
[[ 0.89856076  0.7205586   0.8458721 ]
 [ 0.7205586   0.78707297  0.76450378]
 [ 0.8458721   0.76450378  0.83182775]]


我需要一个指南来了解我的实现有什么问题。我正在用Python语言编程。

最佳答案

如果删除np.cov,则可以使用NaN

>>> np.cov(df.dropna().values, rowvar=False)
array([[ 1.31997225,  1.01614032,  1.2238726 ],
       [ 1.01614032,  1.0304141 ,  1.04243784],
       [ 1.2238726 ,  1.04243784,  1.17528792]])


或更简单地说,使用pandas .cov自动将NaN改掉:

>>> df.cov()
           YAU      OTBL       HLE
YAU   1.319972  1.016140  1.223873
OTBL  1.016140  1.030414  1.042438
HLE   1.223873  1.042438  1.175288


[EDIT]:根据您的预期输出,您实际上是将NaN替换为零:

>>> np.cov(df.replace(np.nan, 0).values, rowvar=False)
array([[ 0.89856076,  0.7205586 ,  0.8458721 ],
       [ 0.7205586 ,  0.78707297,  0.76450378],
       [ 0.8458721 ,  0.76450378,  0.83182775]])

>>> df.replace(np.nan, 0).cov()
           YAU      OTBL       HLE
YAU   0.898561  0.720559  0.845872
OTBL  0.720559  0.787073  0.764504
HLE   0.845872  0.764504  0.831828


无论如何,我将保留原始帖子,因为它显示了两个cov函数之间的区别

关于python - 获取数据框的协方差返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51880474/

10-10 21:52