如何将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
相关产品推荐
相关产品推荐

