numpy - 无法弄清楚为什么我会收到此错误。|TypeError: unsupported operationand type(s) for /: 'list' and 'int'
问题描述
我有一个学校项目,我需要从 Yahoo Finance 获取历史数据,然后对其进行一些计算并写一份报告。
import numpy as np
import csv
import pandas_datareader as pdr
def dataanalysis(stock1, comp1, comp2, comp3): # Function to download data from Yahoo
stk1 = pdr.get_data_yahoo(str(stock1), start="1999-11-01", end="2019-11-01") # Downloading 20 years of data
cmp1 = pdr.get_data_yahoo(str(comp1), start="1999-11-01", end="2019-11-01")
cmp2 = pdr.get_data_yahoo(str(comp2), start="1999-11-01", end="2019-11-01")
cmp3 = pdr.get_data_yahoo(str(comp3), start="1999-11-01", end="2019-11-01")
stk1.sort_index(ascending=False, inplace=True) # Put dem badboys in descending order
cmp1.sort_index(ascending=False, inplace=True)
cmp2.sort_index(ascending=False, inplace=True)
cmp3.sort_index(ascending=False, inplace=True)
stk1['Returns'] = (np.log(stk1['Close'] / stk1['Close'].shift(-1)))
cmp1['Returns'] = (np.log(cmp1['Close'] / cmp1['Close'].shift(-1)))
cmp2['Returns'] = (np.log(cmp2['Close'] / cmp2['Close'].shift(-1)))
cmp3['Returns'] = (np.log(cmp3['Close'] / cmp3['Close'].shift(-1)))
stk1.to_csv(str(stock1) + '.csv') # Out putting data to csv files
cmp1.to_csv(str(comp1) + '.csv')
cmp2.to_csv(str(comp2) + '.csv')
cmp3.to_csv(str(comp3) + '.csv')
stk1_returns = list(stk1['Returns']) # Creating a list from the 'Returns' column
cmp1_returns = list(cmp1['Returns'])
cmp2_returns = list(cmp2['Returns'])
cmp3_returns = list(cmp3['Returns'])
del stk1_returns[-1], cmp1_returns[-1], cmp2_returns[-1], cmp3_returns[-1]
stk1_ret_avg, cmp1_ret_avg, cmp2_ret_avg, cmp3_ret_avg = np.average(stk1_returns), np.average(cmp1_returns), np.average(cmp2_returns), np.average(cmp3_returns)
stk1_volit, cmp1_volit, cmp2_volit, cmp3_volit = np.std(stk1_returns), np.std(cmp1_returns), np.std(cmp2_returns), np.std(cmp3_returns)
tickers = ["", str(stock1), str(comp1), str(comp2), str(comp3)]
averages = ["Averages = ", stk1_ret_avg, cmp1_ret_avg, cmp2_ret_avg, cmp3_ret_avg]
volatility = ["Volatility = ", stk1_volit, cmp1_volit, cmp2_volit, cmp3_volit]
correlations = np.corrcoef([stk1_returns, cmp1_returns, cmp2_returns, cmp3_returns])
data_analyzed = [tickers, averages, volatility, correlations]
# print(data_analyzed)
return data_analyzed
def print_results(group):
ticker_list = list(group[0])
with open(str(ticker_list[1]) + " and Comp"".csv", "w") as group_anal:
groupCSV = csv.writer(group_anal)
for i in range(3):
groupCSV.writerow(group[i])
for i in range(2):
groupCSV.writerow([])
groupCSV.writerow(["Correlation Matrix"])
groupCSV.writerow(ticker_list[1:5])
for r in group[3]:
groupCSV.writerow(r)
group1 = dataanalysis("AAPL", "AMZN", "INTC", "MSFT") # Running the function
# group2 = dataanalysis("BARC.L", "BK", "GS", "DB")
group3 = dataanalysis("BRK-B", "ALL", "PGR", "MKL")
group4 = dataanalysis("MCD", "SBUX", "YUM", "WEN")
# group5 = dataanalysis("TSCO.L", "CA.PA", "SBRY.L", "WMT")
group6 = dataanalysis("WWE", "DISH", "DIS", "CMCSA")
print_results(group1)
# print_results(group2)
print_results(group3)
print_results(group4)
# print_results(group5)
print_results(group6)
这运行没有问题,但是如果我包含其他注释掉的 group2 和 5 我会收到以下错误:
File "C:/Users/HHF/OneDrive/Programming/Python/Assignments/Final Assignment/Financial Records/calculations.py", line 62, in <module>
group2 = dataanalysis("BARC.L", "BK", "GS", "DB")
File "C:/Users/HHF/OneDrive/Programming/Python/Assignments/Final Assignment/Financial Records/calculations.py", line 40, in dataanalysis
correlations = np.corrcoef([stk1_returns, cmp1_returns, cmp2_returns, cmp3_returns])
"TypeError: unsupported operand type(s) for /: 'list' and 'int'" error.
我已经尝试了我能想到的一切,但没有任何效果。如果我删除所有带有句点符号的代码,它可以工作,但我不确定为什么会这样,因为如果我打印 stk1_returns 它似乎是一个常规列表。
非常感谢你能给我的任何帮助。
解决方案
您传递的其中一件事np.corrcoef
不是您认为的那样。
例如,这会引发相同的错误:
import numpy as np
np.corrcoef([[[1,2,3,4]], [4,5,6,7]])
请注意,第一个“数组”实际上是一个列表的列表。也许您将stk1['Returns']
etc 投射到列表的位置出错了。(如果我是你,我会坚持使用数组。)
推荐阅读
- c - 为什么这个例子显式地将字符串的最后一个字符(由`snprintf()`分配)设置为`/0`?
- swift - 如何在 swift 4 的闭包中分配类属性
- docker - 为什么我的 Docker 端口没有正确暴露?
- c++ - 我在双向链表上使用此打印功能时遇到问题
- php - PHP倒数计时器显示小时数错误
- javascript - 使用 Google Favicon 但不要获得默认地球仪。当不存在 Favicon 时
- javascript - 使用循环创建对象链接
- java - 我需要在 Spring Boot 项目中使用 mockito
- php - 显示当前周和下周的完整日历
- matlab - Matlab,符号函数的总和