Movatterモバイル変換


[0]ホーム

URL:


Skip to main content
OurBuilding Ambient Agents with LangGraph course is now available on LangChain Academy!
Open In ColabOpen on GitHub

Pandas Dataframe

This notebook shows how to use agents to interact with aPandas DataFrame. It is mostly optimized for question answering.

NOTE: this agent calls thePython agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.

NOTE: Since langchain migrated to v0.3 you should upgrade langchain_openai and langchain. This would avoid import errors.

pip install --upgrade langchain_openaipip install --upgrade langchain

from langchain.agents.agent_typesimport AgentType
from langchain_experimental.agents.agent_toolkitsimport create_pandas_dataframe_agent
from langchain_openaiimport ChatOpenAI
import pandasas pd
from langchain_openaiimport OpenAI

df= pd.read_csv(
"https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"
)
API Reference:OpenAI

UsingZERO_SHOT_REACT_DESCRIPTION

This shows how to initialize the agent using theZERO_SHOT_REACT_DESCRIPTION agent type.

agent= create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)

Using OpenAI Functions

This shows how to initialize the agent using the OPENAI_FUNCTIONS agent type. Note that this is an alternative to the above.

agent= create_pandas_dataframe_agent(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"),
df,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
agent.invoke("how many rows are there?")


> Entering new chain...

Invoking: `python_repl_ast` with `df.shape[0]`


891There are 891 rows in the dataframe.

> Finished chain.
'There are 891 rows in the dataframe.'
agent.invoke("how many people have more than 3 siblings")


> Entering new AgentExecutor chain...
Thought: I need to count the number of people with more than 3 siblings
Action: python_repl_ast
Action Input: df[df['SibSp'] > 3].shape[0]
Observation: 30
Thought: I now know the final answer
Final Answer: 30 people have more than 3 siblings.

> Finished chain.
'30 people have more than 3 siblings.'
agent.invoke("whats the square root of the average age?")


> Entering new AgentExecutor chain...
Thought: I need to calculate the average age first
Action: python_repl_ast
Action Input: df['Age'].mean()
Observation: 29.69911764705882
Thought: I now need to calculate the square root of the average age
Action: python_repl_ast
Action Input: math.sqrt(df['Age'].mean())
Observation: NameError("name 'math' is not defined")
Thought: I need to import the math library
Action: python_repl_ast
Action Input: import math
Observation: 
Thought: I now need to calculate the square root of the average age
Action: python_repl_ast
Action Input: math.sqrt(df['Age'].mean())
Observation: 5.449689683556195
Thought: I now know the final answer
Final Answer: The square root of the average age is 5.449689683556195.

> Finished chain.
'The square root of the average age is 5.449689683556195.'

Multi DataFrame Example

This next part shows how the agent can interact with multiple dataframes passed in as a list.

df1= df.copy()
df1["Age"]= df1["Age"].fillna(df1["Age"].mean())
agent= create_pandas_dataframe_agent(OpenAI(temperature=0),[df, df1], verbose=True)
agent.invoke("how many rows in the age column are different?")


> Entering new AgentExecutor chain...
Thought: I need to compare the age columns in both dataframes
Action: python_repl_ast
Action Input: len(df1[df1['Age'] != df2['Age']])
Observation: 177
Thought: I now know the final answer
Final Answer: 177 rows in the age column are different.

> Finished chain.
'177 rows in the age column are different.'

Related


[8]ページ先頭

©2009-2025 Movatter.jp