Python 字典中每个键的协方差

Python 字典中每个键的协方差,python,numpy,pandas,covariance,Python,Numpy,Pandas,Covariance,我有一份清单,是一套股票行情表。对于每一个股票,我得到了六个月前的每日回报。然后我想计算每个股票代码之间的协方差。我在np.cov方面遇到问题,以下是我测试cov的代码: newStockDict = {} for i in newList_of_index: a = Share(i) dataB = a.get_historical(look_back_date, end_date) stockData = pd.DataFrame(dataB) stockDa

我有一份清单,是一套股票行情表。对于每一个股票,我得到了六个月前的每日回报。然后我想计算每个股票代码之间的协方差。我在
np.cov
方面遇到问题,以下是我测试cov的代码:

newStockDict = {}
for i in newList_of_index:
    a = Share(i)
    dataB = a.get_historical(look_back_date, end_date)
    stockData = pd.DataFrame(dataB)
    stockData['Daily Return'] = ""
    yList = []
    for y in range(0,len(stockData)-1):
        stockData['Daily Return'][y] = np.log(float(stockData['Adj_Close'][y])/float(stockData['Adj_Close'][y+1]))

    yList = stockData['Daily Return'].values.tolist()
    newStockDict[stockData['Symbol'][0]] = yList

g = (np.cov(pd.Series((newStockDict[newList_of_index[0]]))), pd.Series(((newStockDict[newList_of_index[1]]))))
return g
我的错误是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Udaya\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 580, in runfile
    execfile(filename, namespace)
  File "C:/Users/Udaya/Documents/Python Scripts/SR_YahooFinanceRead.py", line 150, in <module>
    print CumReturnStdDev(stock_list)
  File "C:/Users/Udaya/Documents/Python Scripts/SR_YahooFinanceRead.py", line 132, in CumReturnStdDev
    g = (np.cov(pd.Series((newStockDict[newList_of_index[0]]))), pd.Series(((newStockDict[newList_of_index[1]]))))
  File "C:\Users\Udaya\Anaconda\lib\site-packages\numpy\lib\function_base.py", line 1885, in cov
    X -= X.mean(axis=1-axis, keepdims=True)
  File "C:\Users\Udaya\Anaconda\lib\site-packages\numpy\core\_methods.py", line 66, in _mean
    ret = umr_sum(arr, axis, dtype, out, keepdims)
TypeError: unsupported operand type(s) for +: 'numpy.float64' and 'str'
>>> TypeError: unsupported operand type(s) for +: 'numpy.float64' and 'str'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Udaya\Anaconda\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第580行,在runfile中
execfile(文件名、命名空间)
文件“C:/Users/Udaya/Documents/Python Scripts/SR_YahooFinanceRead.py”,第150行,在
打印CumReturnsTDEV(库存清单)
文件“C:/Users/Udaya/Documents/Python Scripts/SR_YahooFinanceRead.py”,第132行,以CumReturnsTDEV格式
g=(np.cov(pd.Series((newStockDict[newList_of u index[0]])),pd.Series((newStockDict[newList_of u index[1]]))
cov中第1885行的文件“C:\Users\Udaya\Anaconda\lib\site packages\numpy\lib\function\u base.py”
X-=X.平均值(轴=1轴,keepdims=True)
文件“C:\Users\Udaya\Anaconda\lib\site packages\numpy\core\\u methods.py”,第66行,单位为
ret=umr_和(arr、轴、数据类型、out、keepdims)
TypeError:不支持+:'numpy.float64'和'str'的操作数类型
>>>TypeError:不支持+:'numpy.float64'和'str'的操作数类型
我尝试在数据帧上使用
pd.cov
,然后使用
np.cov
。什么都不管用。在这里,我实际上是将每日收益添加到列表中,然后添加到字典中,然后再通过
n
协方差矩阵手动计算
n
。但是我无法让
np.cov
工作


请帮忙。我的想法是,我可以很容易地构建一个由N个股票代码组成的数据框架,每一行都是每日收益。但是我无法使用所述数据帧计算cov,因此这是df-->列表-->dict过程。

没有回答这个问题,但如果没有迭代变量,for循环的拼写会更好:
stockData['Daily Return']=[np.log(float(a)/float(b))for a,b in zip(stockData['Adj_Close'],stockData['Adj_Close'][1:])]
什么是
stockData>['Daily Return']=''
doing?如果打印出来,
ylist的值是多少?@Eric--ylist的值是一个每日回报列表。stockData['Daily Return']正在向数据框“stockData”添加一列每日回报。@Eric--将“stockData['Daily Return']=[np.log(float(a)/float(b)),用于zip中的a,b(stockData['Adj_Close'],stockData['Adj_Close'][1:]“基本上没有循环就可以做同样的事情吗?我在读这篇文章,但我不完全理解它。我想看看
ylist
(或者至少
ylist[:5],ylist[-5:
)的实际值,而不仅仅是你对它所包含内容的总结