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

如何将API获取的单只股票数据合并为日期索引的主DataFrame

解决方案

核心思路

将每个API返回的单只股票数据处理为以日期为索引、股票代码为列的格式,逐步合并到主DataFrame中,最终得到日期为行、股票代码为列的结构化数据。

修正后的完整代码

import requests
import pandas as pd
import time  # 用于控制请求频率,避免触发API限流

# 获取唯一股票代码列表(修正原代码中unique缺少括号的问题)
tickers = list(data.ticker.unique())

# 初始化主DataFrame
main_df = None

for ticker in tickers:
    try:
        # 修正API调用中的变量错误:使用ticker而非tickers
        api_response = requests.get(f'api_call_from_site.com/stonkz&ticker={ticker}')
        # 检查请求是否成功
        api_response.raise_for_status()
        stock_data = api_response.json()
        
        # 将JSON数据转为DataFrame
        df = pd.DataFrame(stock_data)
        
        # 处理日期格式:转换为datetime并保留日期部分
        df['date'] = pd.to_datetime(df['date']).dt.date
        # 设置日期为索引
        df.set_index('date', inplace=True)
        
        # 将adjClose列重命名为股票代码
        df.rename(columns={'adjClose': ticker}, inplace=True)
        
        # 合并到主DataFrame
        if main_df is None:
            main_df = df
        else:
            # outer保留所有日期,inner仅保留共同日期(根据需求选择)
            main_df = main_df.join(df, how='outer')
        
        # 可选:添加请求间隔,避免API限流
        time.sleep(0.5)
        
    except Exception as e:
        print(f"处理{ticker}时出错:{e}")
        continue

# 将索引转换为datetime类型(可选,便于后续时间序列操作)
main_df.index = pd.to_datetime(main_df.index)
# 按日期排序
main_df.sort_index(inplace=True)

# 查看结果
print(main_df.head())

关键细节说明

  1. 修正API调用错误:原代码中{tickers}改为{ticker},确保请求对应单只股票数据。
  2. 日期处理:将API返回的带时间戳的日期转换为纯日期格式,统一索引格式。
  3. 合并逻辑:使用join方法按日期索引合并,保证每一行对应同一日期的多只股票收盘价。
  4. 错误处理:通过try-except捕获请求或数据处理异常,避免因单只股票失败导致整个循环中断。
  5. 限流控制:添加time.sleep降低请求频率,防止触发API的访问限制(根据API规则调整间隔时间)。

最终结果格式

处理完成后,main_df的结构将与你期望的一致:

dateAAPLTSLAAMD...
2020-01-0273.4678.........
2020-01-0372.7535.........

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:29