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

如何将polygon.io拉取的股票数据追加到现有Pandas DataFrame中

正确实现Pandas DataFrame追加数据的方案

你当前的实现逻辑是可行的,但存在两处可优化的问题:

  • DataFrame.append()方法在Pandas 1.4及以上版本已经被正式弃用,运行时会抛出版本警告,官方推荐使用pd.concat()完成数据拼接
  • 循环内反复修改DataFrame会产生大量冗余拷贝,性能较差,尤其当股票代码数量较多时耗时会明显上升
  • 最终输出的结果没有关联对应股票代码,后续使用时无法区分每条数据所属标的

优化后实现代码

import pandas as pd
import requests

# 提前定义好时间参数,替换为你实际需要的查询日期
fromdate = "2021-12-01"
to = "2021-12-01"
sym = ['OCGN', 'TKAT', 'MMAT', 'MDIA', 'PHUN']

# 初始化空列表存储每个股票的查询结果
res_list = []

for stock in sym:
    # 修正url写法,f-string不需要额外调用format
    url = f'https://api.polygon.io/v2/aggs/ticker/{stock}/range/1/day/{fromdate}/{to}?adjusted=true&sort=asc&limit=50000&apiKey=Demo'
    tick = requests.get(url)
    # 取返回结果的最后一行数据
    tick_df = pd.json_normalize(tick.json()["results"]).iloc[[-1]]
    # 新增股票代码列,方便后续区分不同标的数据
    tick_df['ticker'] = stock
    res_list.append(tick_df)

# 所有数据查询完成后一次性合并
df = pd.concat(res_list, ignore_index=True)
print(df)

补充注意事项

  • 可以根据需要增加异常捕获逻辑,避免单个标的请求失败导致整个程序终止,比如对请求返回状态校验、results字段存在性校验
  • 代码中的apiKey=Demo为测试密钥,调用次数有限,正式使用请替换为你自己在polygon.io申请的有效密钥
  • 如果确实需要在循环过程中实时追加数据,也可以每次调用df = pd.concat([df, new_data], ignore_index=True),但性能会低于先存列表再合并的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:06