Google Colab中pdr.get_data_tiingo报错:TypeError: concat()参数数量不符
解决pandas_datareader调用Tiingo接口的TypeError问题
在Google Colab执行以下代码获取台积电(TSM)股票数据时出现报错:
import pandas_datareader as pdr import numpy as np STOCK = pdr.get_data_tiingo('TSM', api_key='64dbe0a7e978cc2501fcc1e56aaf1935c63f78de') STOCK = STOCK.reset_index(level=[0,1]) STOCK.index = STOCK['date'] STOCK_adj = STOCK.iloc[:, 7:12] STOCK_adj.columns = ['Close', 'High', 'Low', 'Open', 'Volume'] STOCK_adj
报错核心信息:
TypeError: concat() takes 1 positional argument but 2 were given
完整错误回溯:
TypeError Traceback (most recent call last) <ipython-input-50-ca49edb453ba> in <cell line: 1>() ----> 1 STOCK = pdr.get_data_tiingo('TSM', api_key='64dbe0a7e978cc2501fcc1e56aaf1935c63f78de') 2 STOCK = STOCK.reset_index(level=[0,1]) 3 STOCK.index = STOCK['date'] 4 STOCK_adj = STOCK.iloc[:, 7:12] 5 STOCK_adj.columns = ['Close', 'High', 'Low', 'Open', 'Volume'] 1 frames /usr/local/lib/python3.10/dist-packages/pandas_datareader/data.py in get_data_tiingo(*args, **kwargs) 118 119 def get_data_tiingo(*args, **kwargs): ---> 120 return TiingoDailyReader(*args, **kwargs).read() 121 122 /usr/local/lib/python3.10/dist-packages/pandas_datareader/tiingo.py in read(self) 232 finally: 233 self.close() ---> 234 return pd.concat(dfs, self._concat_axis) 235 236 TypeError: concat() takes 1 positional argument but 2 were given
问题原因
这个错误是pandas_datareader旧版本与高版本pandas不兼容导致的:pandas 2.x及以上版本调整了pd.concat()的参数格式,而旧版pandas_datareader仍使用过时的位置参数传递方式,触发参数不匹配错误。
解决方案
方案1:升级pandas_datareader到最新版本
新版本已修复该兼容问题,在Colab中执行以下命令升级:
!pip install --upgrade pandas_datareader
升级完成后重新运行原代码即可正常获取数据。
方案2:直接调用Tiingo官方API(绕过pandas_datareader)
如果升级后仍有问题,或者不想依赖pandas_datareader,可直接通过Tiingo的REST API获取数据,示例代码如下:
import pandas as pd import requests # 替换为你的Tiingo API密钥 API_KEY = '64dbe0a7e978cc2501fcc1e56aaf1935c63f78de' SYMBOL = 'TSM' # 调用API获取每日股价数据 url = f'https://api.tiingo.com/tiingo/daily/{SYMBOL}/prices?token={API_KEY}' response = requests.get(url) data = response.json() # 转换为DataFrame并调整格式 STOCK = pd.DataFrame(data) STOCK['date'] = pd.to_datetime(STOCK['date']) STOCK.set_index('date', inplace=True) # 筛选并重命名所需列 STOCK_adj = STOCK[['close', 'high', 'low', 'open', 'volume']] STOCK_adj.columns = ['Close', 'High', 'Low', 'Open', 'Volume'] # 查看结果 STOCK_adj
额外说明
- 确保你的Tiingo API密钥有效,Tiingo提供免费调用额度,超出后需付费。
- 直接调用API时可通过
startDate和endDate参数指定数据范围,示例:url = f'https://api.tiingo.com/tiingo/daily/{SYMBOL}/prices?startDate=2023-01-01&endDate=2024-01-01&token={API_KEY}'
内容的提问来源于stack exchange,提问作者江軍緯
相关产品推荐
相关产品推荐

