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

使用LangChain的create_pandas_dataframe_agent处理多DataFrame报错求助

解决create_pandas_dataframe_agent处理多DataFrame时的ValueError问题

问题原因

  • 误用针对补全模型的OpenAI类调用聊天模型gpt-3.5-turbo,该模型需使用专门的ChatOpenAI类。
  • 当前使用的LangChain版本不支持直接传入DataFrame列表作为输入,导致类型匹配错误。

解决办法

1. 核心修正方向

替换模型类为ChatOpenAI,并将多DataFrame封装为带命名的字典传入(新版本LangChain支持此格式,同时能让Agent明确区分数据集)。

2. 修正后的完整代码

from langchain.chat_models import ChatOpenAI
from langchain.agents import create_pandas_dataframe_agent
import pandas as pd

# 导入原始数据
df = pd.read_csv("titanic.csv")

# 创建填充Age缺失值后的DataFrame
df1 = df.copy()
df1["Age"] = df1["Age"].fillna(df1["Age"].mean())

# 用字典为每个DataFrame命名,便于Agent识别
dataset_dict = {"原始数据集": df, "填充Age后的数据集": df1}

# 创建支持多DataFrame的Agent
agent = create_pandas_dataframe_agent(
    ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo', deployment_id="chat"),
    dataset_dict,
    verbose=True
)

# 执行查询
agent.run("原始数据集和填充Age后的数据集的Age列有多少行数据不同?")

3. 旧版本兼容方案

若无法升级LangChain,旧版create_pandas_dataframe_agent仅支持单个DataFrame输入,可手动将多DataFrame合并为带标识列的单DataFrame:

# 给每个DataFrame添加标识列
df["数据集类型"] = "原始"
df1["数据集类型"] = "填充Age后"
merged_df = pd.concat([df, df1])

# 传入合并后的DataFrame创建Agent
agent = create_pandas_dataframe_agent(
    ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo', deployment_id="chat"),
    merged_df,
    verbose=True
)
agent.run("统计原始数据集和填充Age后数据集的Age列不同的行数")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:06