我有一个这样的数据框:
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/