Skip to main content

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行不同。'