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

使用Polygon.io获取股票成交量后导出空白Excel问题求助

问题分析与修复方案

你的代码导出Excel仅保留原列的核心原因是Polygon API日期格式不兼容,导致接口返回无效数据,存储成交量的volume_data_df始终为空。以下是具体问题点和修复后的完整方案:

核心问题拆解

  • API日期格式错误:Polygon API要求日期参数为YYYY-MM-DD纯日期格式,但你直接传入Python datetime对象,会生成带时间戳的字符串(如2023-10-01 00:00:00),接口无法识别,返回空结果。
  • 空DataFrame赋值风险:初始化volume_data_df = pd.DataFrame()后,用loc赋值时索引无法与原DataFrame对齐,导致数据无法正确写入。
  • 列引用不严谨:用row[0]、row[1]依赖列顺序,若Excel列顺序变动会直接报错。

修复后的完整代码

import pandas as pd
import requests
from datetime import timedelta

# 读取Excel数据,用列名引用更可靠
df = pd.read_excel(r'C:\Users\patri\Downloads\Volume data.xlsx')
# 初始化成交量DataFrame,与原数据索引对齐
volume_data_df = pd.DataFrame(index=df.index)

# 遍历每一行数据
for index, row in df.iterrows():
    # 改用列名获取日期和股票代码,避免依赖列顺序
    date = row['Date']
    ticker = row['Ticker']

    # 转换为API要求的YYYY-MM-DD格式
    end_date = pd.to_datetime(date).strftime('%Y-%m-%d')
    start_date = (pd.to_datetime(date) - timedelta(days=30)).strftime('%Y-%m-%d')

    # 构造正确格式的API请求URL
    api_url = f"https://api.polygon.io/v2/aggs/ticker/{ticker}/range/1/day/{start_date}/{end_date}?apiKey=My API KEY"

    try:
        response = requests.get(api_url)
        if response.status_code == 200:
            data = response.json()
            if data['status'] == 'OK':
                results = data['results']
                # 填充返回的成交量数据
                for i, result in enumerate(results):
                    volume_data_df.loc[index, f"Day {i+1} Volume"] = result['v']
                # 若交易日不足30天,补全空值保证30列
                for i in range(len(results), 30):
                    volume_data_df.loc[index, f"Day {i+1} Volume"] = None
            else:
                print(f"{ticker}数据获取失败:{data['error']}")
        else:
            print(f"{ticker}请求失败,状态码:{response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"{ticker}请求异常:{str(e)}")

# 合并原数据与成交量数据
combined_df = pd.concat([df, volume_data_df], axis=1)
# 导出结果
combined_df.to_excel('Volume Data2.xlsx', index=False)

额外优化说明

  • 日期格式强制转换:用strftime('%Y-%m-%d')确保日期完全符合Polygon API的要求。
  • 索引对齐:初始化volume_data_df时绑定原DataFrame的索引,避免赋值时出现索引不匹配问题。
  • 固定30列输出:如果30天内存在非交易日(周末、节假日),自动填充空值保证输出固定30个成交量列。
  • 健壮性提升:改用列名引用数据,避免因Excel列顺序变动导致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:20:04