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

循环迭代Pandas DataFrame时,如何将Azure OpenAI响应写入已有列

循环迭代Pandas DataFrame时,如何将Azure OpenAI响应写入已有列

嗨,我看了你遇到的问题,核心是误用了insert()方法——这个函数是用来新增一列的,而你需要的是更新已有列里对应行的值,难怪会报错说列已经存在啦。

咱们直接修改你的循环代码就行,用loc来定位当前行的AI Response列,把OpenAI的响应赋值过去就好:

import time
import pandas as pd
import openai

# 假设你已经正确加载了df_descriptions
for index, row in df_descriptions.iterrows():
    # 注意列名大小写要和DataFrame里的一致,你的列名是Description(首字母大写)
    prompt = row['Description']
    response = openai.ChatCompletion.create(
        engine="gpt-35-turbo",
        messages=[
            {"role": "system", "content": "You are an AI assistant"},
            {"role": "user", "content": prompt},
        ],
        temperature=0.3,
        max_tokens=1000,
        top_p=0.95,
        frequency_penalty=0,
        presence_penalty=0,
        stop=None,
    )
    # 关键修改:用loc定位当前行的AI Response列,直接赋值覆盖NaN
    df_descriptions.loc[index, 'AI Response'] = response.choices[0].message.content
    print(df_descriptions['AI Response'])
    time.sleep(5)

为什么这样可行?

  • iterrows()每次循环会返回当前行的index(行索引)和row(行数据),用df.loc[index, '列名']就能精准定位到你要更新的单元格,直接赋值就会替换原来的NaN值。
  • 全程只是修改已有列的内容,不会触发列重复创建的问题,完美匹配你的需求。

小细节提醒

你原代码里写的是row['description'],但你的DataFrame列名是Description(首字母大写),这里一定要注意大小写一致,不然会取不到提示文本哦!

如果之后你的数据量变大,iterrows()的效率可能不够理想,那时候可以考虑用apply函数批量处理,但目前你的场景下,iterrows()搭配loc的写法简单直观,完全够用。

备注:内容来源于stack exchange,提问作者pg.lopes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:34:53