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

如何对Pandas DataFrame分批分页并批量调用API生成新列?

问题描述

现有如下结构的Pandas DataFrame:

id        sentence
1       "Some txt"
2    "Another txt"
3    "Awkward txt"
4       "Last txt"
...
9273

需要将数据按每20条分批处理,调用一次可返回20个元素的批量API,为DataFrame生成新列parsed,最终结构如下:

id        sentence   parsed
1       "Some txt"     1242
2    "Another txt"     9762
3    "Awkward txt"     9355
4       "Last txt"     4126
...
9273

实际场景中,希望避免用.apply()循环调用API,而是提取每批的sentence列值批量传入API,再将返回结果对应到原DataFrame的每一行,该如何实现?

解决方案

1. 为数据添加批次分组标记

先给原DataFrame增加一个临时的批次列,通过整数除法将每20条数据划分为同一批次:

import pandas as pd

# 假设原数据存储在df中
df['batch'] = df.index // 20
# 如果原索引不是连续整数,先重置索引:df = df.reset_index(drop=True)

2. 按批次批量调用API并赋值

遍历每个批次分组,提取该组的文本列表传入API,再将返回结果精准对应到原DataFrame的行:

# 替换为你的实际批量API调用函数,需保证返回结果与输入列表顺序一致
def batch_api_call(sentence_list):
    # 示例逻辑:返回模拟的解析结果,实际替换为API调用代码
    return [hash(sent) % 10000 for sent in sentence_list]

# 遍历每个批次
for batch_num, group in df.groupby('batch'):
    # 提取当前批次的所有文本
    batch_texts = group['sentence'].tolist()
    # 调用批量API获取结果
    parsed_results = batch_api_call(batch_texts)
    # 将结果赋值回原DataFrame对应行
    df.loc[group.index, 'parsed'] = parsed_results

# 清理临时批次列
df.drop('batch', axis=1, inplace=True)

3. 关键注意事项

  • 索引一致性:如果原DataFrame的索引不连续,必须先执行df = df.reset_index(drop=True),否则分组会出错。
  • 异常处理:API调用需添加重试/异常捕获逻辑,避免单个批次失败导致流程中断,示例如下:
    import time
    from tenacity import retry, stop_after_attempt, wait_exponential
    
    @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
    def batch_api_call(sentence_list):
        # 实际API调用逻辑,以POST请求为例
        import requests
        response = requests.post("your_api_url", json={"sentences": sentence_list})
        response.raise_for_status()  # 触发HTTP状态码异常
        return response.json()['parsed_results']
    
  • 顺序一致性:必须确保API返回的结果顺序和输入的文本列表顺序完全匹配,否则会出现结果错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:14