解决股票数据分析代码中AttributeError: module 'numpy' has no attribute 'concat'错误
问题与解决方案:AttributeError: module 'numpy' has no attribute 'concat'
问题重现
运行股票分析代码时触发以下错误:
AttributeError: module 'numpy' has no attribute 'concat'
原代码如下:
import numpy as pd # The stocks we'll use for this analysis: tech_list = ['AMZN', 'NVDA', 'VOO', 'QQQ'] # Set up End and Start times for data grab tech_list = ['AMZN', 'NVDA', 'VOO', 'QQQ'] end = datetime.now() start = datetime(end.year - 1, end.month, end.day) for stock in tech_list: globals()[stock] = yf.download(stock, start, end) company_list = [AMZN, NVDA, VOO, QQQ] company_name = ["AMAZON", "NVIDIA", "Vanguard S&P 500", "Invesco QQQ"] for company, com_name in zip(company_list, company_name): company["company_name"] = com_name df = pd.concat(company_list, axis=0) df.tail(10)
错误原因
- 核心错误:第一行导入语句错误,将
numpy别名为pd,但concat()是pandas库的方法,numpy没有这个属性。 - 隐含问题:代码中使用了
datetime和yf(yfinance),但没有导入这两个模块,运行时还会触发额外的导入错误。 - 冗余代码:重复定义了
tech_list变量。
修复步骤
- 修正导入:将
import numpy as pd改为import pandas as pd,如果不需要numpy可直接删除该行; - 导入缺失模块:添加
import datetime和import yfinance as yf; - 移除冗余的
tech_list定义;
完整修正代码
import pandas as pd import datetime import yfinance as yf # 用于分析的股票列表 tech_list = ['AMZN', 'NVDA', 'VOO', 'QQQ'] # 设置数据抓取的起止时间 end = datetime.datetime.now() start = datetime.datetime(end.year - 1, end.month, end.day) # 下载各股票数据 for stock in tech_list: globals()[stock] = yf.download(stock, start, end) # 合并数据并添加公司名称 company_list = [AMZN, NVDA, VOO, QQQ] company_name = ["AMAZON", "NVIDIA", "Vanguard S&P 500", "Invesco QQQ"] for company, com_name in zip(company_list, company_name): company["company_name"] = com_name # 拼接DataFrame df = pd.concat(company_list, axis=0) print(df.tail(10))
内容的提问来源于stack exchange,提问作者André Freitas
相关产品推荐
相关产品推荐

