Pandas Dataframe Agent
这个笔记本展示了如何使用代理与pandas dataframe进行交互。它主要用于问答。
注意:这个代理在底层调用Python代理,执行LLM生成的Python代码 - 如果LLM生成的Python代码有害,这可能是不好的。请谨慎使用。
from langchain.agents import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain.llms import OpenAI
import pandas as pd
df = pd.read_csv("titanic.csv")
使用ZERO_SHOT_REACT_DESCRIPTION
这展示了如何使用ZERO_SHOT_REACT_DESCRIPTION代理类型来初始化代理。请注意,这是上面的一种替代方法。
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)
使用OpenAI函数
这展示了如何使用OPENAI_FUNCTIONS代理类型来初始化代理。请注意,这是上面的一种替代方法。
agent = create_pandas_dataframe_agent(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"),
df,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
agent.run("有多少行?")
> 进入新的链...
调用:`python_repl_ast`,使用 `df.shape[0]`
891数据框中有891行。
> 完成链。
'数据框中有891行。'
agent.run("有多少人有超过3个兄弟姐妹")
> 进入新的AgentExecutor链...
思考:我需要计算有超过3个兄弟姐妹的人数
动作:python_repl_ast
动作输入:df[df['SibSp'] > 3].shape[0]
观察:30
思考:我现在知道最终答案了
最终答案:有30个人有超过3个兄弟姐妹。
> 完成链。
'有30个人有超过3个兄弟姐妹。'
agent.run("平均年龄的平方根是多少?")
> 进入新的AgentExecutor链...
思考:我首先需要计算平均年龄
动作:python_repl_ast
动作输入:df['Age'].mean()
观察:29.69911764705882
思考:我现在需要计算平均年龄的平方根
动作:python_repl_ast
动作输入:math.sqrt(df['Age'].mean())
观察:NameError("name 'math' is not defined")
思考:我需要导入math库
动作:python_repl_ast
动作输入:import math
观察:
思考:我现在需要计算平均年龄的平方根
动作:python_repl_ast
动作输入:math.sqrt(df['Age'].mean())
观察:5.449689683556195
思考:我现在知道最终答案了
最终答案:平均年龄的平方根是5.449689683556195。
> 完成链。
'平均年龄的平方根是5.449689683556195。'
多个DataFrame示例
下面的部分展示了代理如何与作为列表传入的多个数据框进行交互。
df1 = df.copy()
df1["Age"] = df1["Age"].fillna(df1["Age"].mean())
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), [df, df1], verbose=True)
agent.run("年龄列中有多少行不同?")
> 进入新的AgentExecutor链...
思考:我需要比较两个数据框中的年龄列
动作:python_repl_ast
动作输入:len(df1[df1['Age'] != df2['Age']])
观察:177
思考:我现在知道最终答案了
最终答案:年龄列中有177行不同。
> 完成链。
'年龄列中有177行不同。'