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

循环拉取URL的JSON数据追加到DataFrame时数据被覆盖如何解决

pandas分页请求接口数据追加合并解决方案

问题根源

你原来的代码存在三个核心问题导致追加失败:

  • 循环内部每次都将df变量赋值为当前页的新数据,直接覆盖了上一轮循环的历史数据
  • df = df.append(df)的逻辑是将当前页数据重复追加一次,完全没有和历史数据做合并
  • pandas 1.4及以上版本已经正式弃用append()方法,官方推荐使用pd.concat()完成数据合并操作

基础修改方案

循环开始前先初始化空的DataFrame存储全量数据,每次请求完成后将当前页数据合并到全量表中:

import pandas as pd

# 初始化空DataFrame存储所有数据
all_df = pd.DataFrame()
# 若不需要前10条数据可以将offset初始值改回10
offset = 0

while offset < 1000:
    url = f"https://someurl/?limit=10&offset={offset}"
    data = pd.read_json(url)
    # 解析当前页数据
    page_df = pd.json_normalize(data['results'])
    # 合并当前页到全量表,ignore_index会重置行索引避免重复
    all_df = pd.concat([all_df, page_df], ignore_index=True)
    offset += 10

# 输出全量数据
print(all_df)

性能优化方案

如果拉取的数据量较大,推荐先将每页数据存入列表,最后做一次性合并,避免循环中反复生成中间DataFrame带来的性能损耗:

import pandas as pd

# 用列表暂存每页数据
page_df_list = []
offset = 0

while offset < 1000:
    url = f"https://someurl/?limit=10&offset={offset}"
    data = pd.read_json(url)
    page_df = pd.json_normalize(data['results'])
    page_df_list.append(page_df)
    offset += 10

# 一次性合并所有页数据
all_df = pd.concat(page_df_list, ignore_index=True)
print(all_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:05