Pandas DataFrame 解析器
Pandas DataFrame 是 Python 编程语言中常用的数据结构,通常用于数据操作和分析。它提供了一套全面的工具,用于处理结构化数据,使其成为数据清洗、转换和分析等任务的多功能选择。
该输出解析器允许用户指定任意 Pandas DataFrame,并查询 LLM 来以字典格式提取相应 DataFrame 中的数据。请记住,大型语言模型是有缺陷的抽象!您将需要使用具有足够容量的 LLM 生成符合定义格式指令的查询。
使用 Pandas 的 DataFrame 对象声明要执行查询的 DataFrame。
import pprint
from typing import Any, Dict
import pandas as pd
from langchain.output_parsers import PandasDataFrameOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAImodel = ChatOpenAI(temperature=0)# 仅用于文档目的。
def format_parser_output(parser_output: Dict[str, Any]) -> None:
for key in parser_output.keys():
parser_output[key] = parser_output[key].to_dict()
return pprint.PrettyPrinter(width=4, compact=True).pprint(parser_output)# 定义您想要的 Pandas DataFrame。
df = pd.DataFrame(
{
"num_legs": [2, 4, 8, 0],
"num_wings": [2, 0, 0, 0],
"num_specimen_seen": [10, 2, 1, 8],
}
)
# 设置解析器 + 将说明注入到提示模板中。
parser = PandasDataFrameOutputParser(dataframe=df)# 这是正在执行的列操作示例。
df_query = "检索 num_wings 列。"
# 设置提示。
prompt = PromptTemplate(
template="回答用户查询。\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | model | parser
parser_output = chain.invoke({"query": df_query})
format_parser_output(parser_output){'num_wings': {0: 2,
1: 0,
2: 0,
3: 0}}# 这是正在执行的行操作示例。
df_query = "检索第一行。"
# 设置提示。
prompt = PromptTemplate(
template="回答用户查询。\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | model | parser
parser_output = chain.invoke({"query": df_query})
format_parser_output(parser_output){'0': {'num_legs': 2,
'num_specimen_seen': 10,
'num_wings': 2}}# 这是限制行数的随机 Pandas DataFrame 操作的示例。
df_query = "从第 1 行到第 3 行检索 num_legs 列的平均值。"
# 设置提示。
prompt = PromptTemplate(
template="回答用户查询。\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | model | parser
parser_output = chain.invoke({"query": df_query})
print(parser_output){'mean': 4.0}# 这是一个格式错误查询的示例
df_query = "检索 num_fingers 列的平均值。"
# 设置提示。
prompt = PromptTemplate(
template="回答用户查询。\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | model | parser
parser_output = chain.invoke({"query": df_query}) 307 kwargs ["run_manager"] = run_manager
--> 308 return func(input, **kwargs)
File ~/workplace/langchain/libs/core/langchain_core/output_parsers/base.py: 171, in BaseOutputParser.invoke.<locals>.<lambda>(inner_input)
166 def invoke(
167 self, input: Union [str, BaseMessage], config: Optional [RunnableConfig] = None
168 ) -> T:
169 if isinstance(input, BaseMessage):
170 return self._call_with_config(
--> 171 lambda inner_input: self.parse_result(
172 [ChatGeneration(message = inner_input)]
173 ),
174 input,
175 config,
176 run_type = "parser",
177 )
178 else:
179 return self._call_with_config(
180 lambda inner_input: self.parse_result([Generation(text = inner_input)]),
181 input,
182 config,
183 run_type = "parser",
184 )
File ~/workplace/langchain/libs/core/langchain_core/output_parsers/base.py: 222, in BaseOutputParser.parse_result(self, result, partial)
209 def parse_result(self, result: List [Generation], *, partial: bool = False) -> T:
210 "" " Parse a list of candidate model Generations into a specific format.
211
212 The return value is parsed from only the first Generation in the result, which
(...)
220 Structured output.
221 "" "
--> 222 return self.parse(result [0].text)
File ~/workplace/langchain/libs/langchain/langchain/output_parsers/pandas_dataframe.py: 90, in PandasDataFrameOutputParser.parse(self, request)
88 request_type, request_params = splitted_request
89 if request_type in {"Invalid column", "Invalid operation"}:
---> 90 raise OutputParserException(
91 f "{request}. Please check the format instructions."
92 )
93 array_exists = re.search(r "(\[.*?\])", request_params)
94 if array_exists:
OutputParserException: Invalid column: num_fingers. Please check the format instructions.查看 PandasDataFrameOutputParser (opens in a new tab) 的 API 文档。