使用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
相关产品推荐
相关产品推荐

