You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas datareader自动迭代多只股票代码批量拉取股票信息

批量获取多只股票数据的实现方案

嘿,这个需求太常见啦!既然你已经搞定了单只股票的获取,要扩展到多只股票其实很简单——核心就是遍历股票代码列表,再把每只股票的数据整合到一起。我给你两种实用方案,你可以按需选择:

方法一:基础循环(直观易上手)

先把你要获取的股票代码放到一个列表里,比如['IBM', 'AAPL', 'MSFT'],然后用循环逐个拉取数据。记得给每只股票的数据加个Ticker列,这样后续区分不同股票会很方便:

import pandas_datareader.data as web
import datetime as dt
import pandas as pd  # 别忘了导入pandas,合并数据需要用

# 定义目标股票代码列表
tickers = ['IBM', 'AAPL', 'MSFT', 'GOOG']
start = dt.datetime(2018,3,26)
end = dt.datetime(2018,3,29)

# 初始化空列表,用来存每只股票的DataFrame
all_stock_data = []

for ticker in tickers:
    # 拉取单只股票数据
    stock_df = web.DataReader(ticker, 'yahoo', start, end).reset_index()
    # 添加股票代码列,标记数据所属股票
    stock_df['Ticker'] = ticker
    # 将当前股票数据加入列表
    all_stock_data.append(stock_df)

# 把所有股票数据合并成一个大的DataFrame
combined_stock_data = pd.concat(all_stock_data, ignore_index=True)
print(combined_stock_data)

方法二:列表推导式(更Pythonic的简洁写法)

如果你喜欢紧凑的代码风格,用列表推导式替代循环会更高效,一行就能生成所有数据的列表,再合并:

import pandas_datareader.data as web
import datetime as dt
import pandas as pd

tickers = ['IBM', 'AAPL', 'MSFT']
start = dt.datetime(2018,3,26)
end = dt.datetime(2018,3,29)

# 列表推导式生成所有股票数据,同时添加Ticker列,最后合并
combined_stock_data = pd.concat(
    [web.DataReader(ticker, 'yahoo', start, end).reset_index().assign(Ticker=ticker)
     for ticker in tickers],
    ignore_index=True
)

print(combined_stock_data)

额外小提示

  • 如果你的股票代码数量较多,建议加上异常处理,避免某一只股票拉取失败导致整个程序中断。比如这样修改循环部分:
for ticker in tickers:
    try:
        stock_df = web.DataReader(ticker, 'yahoo', start, end).reset_index()
        stock_df['Ticker'] = ticker
        all_stock_data.append(stock_df)
    except Exception as e:
        print(f"获取{ticker}数据时出错啦: {e}")
  • 有时候Yahoo的数据源可能会有访问限制,如果遇到拉取失败的情况,可以试试更换其他支持的数据源(比如'fred')。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:31