05. DataFrame Output Parser (PandasDataFrameOutputParser)
Pandas DataFrame adalah struktur data yang banyak digunakan dalam bahasa pemrograman Python, sering digunakan untuk manipulasi dan analisis data. Ini menyediakan seperangkat alat yang komprehensif untuk menangani data terstruktur, yang dapat digunakan dalam berbagai tugas seperti pembersihan data, transformasi, dan analisis.
Parser output ini memungkinkan pengguna untuk menentukan DataFrame Pandas yang diinginkan dan meminta LLM untuk mengekstrak data dari DataFrame tersebut dan mengembalikannya dalam bentuk kamus yang terformat.
from dotenv import load_dotenv
load_dotenv()
True
from langchain_altero import logging
# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
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 ChatOpenAI
# Menginisialisasi model ChatOpenAI (disarankan menggunakan model gpt-4o-mini)
model = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
Fungsi format_parser_output
digunakan untuk mengonversi output parser ke dalam format kamus dan menentukan format output.
# Hanya digunakan untuk tujuan output
def format_parser_output(parser_output: Dict[str, Any]) -> None:
# Menelusuri kunci-kunci dari output parser
for key in parser_output.keys():
# Mengonversi nilai setiap kunci ke dalam kamus
parser_output[key] = parser_output[key].to_dict()
# Menampilkan output dengan format yang rapi
return pprint.PrettyPrinter(width=4, compact=True).pprint(parser_output)
Pada bagian ini, anda akan memerlukan file berikut: titanic.csv (opens in a new tab)
- Baca data dari file
titanic.csv
, lalu muat ke dalam DataFrame dan tetapkan ke variabeldf
. - Gunakan
PandasDataFrameOutputParser
untuk mem-parsing DataFrame.
# Mendefinisikan Pandas DataFrame yang diinginkan
df = pd.read_csv("/content/titanic.csv")
df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.0500 | NaN | S |
# Mengatur parser dan menyisipkan petunjuk ke dalam template prompt
parser = PandasDataFrameOutputParser(dataframe=df)
# Menampilkan petunjuk format dari parser
print(parser.get_format_instructions())
Contoh untuk menampilkan nilai dari kolom-kolom.
# Contoh operasi kolom
df_query = "Tolong tampilkan kolom Name."
# Mengatur template prompt
prompt = PromptTemplate(
template="Jawab pertanyaan pengguna.\n{format_instructions}\n{query}\n",
input_variables=["query"], # Mengatur variabel input
partial_variables={
"format_instructions": parser.get_format_instructions()
}, # Mengatur variabel parsial
)
# Membuat chain
chain = prompt | model | parser
# Menjalankan chain
parser_output = chain.invoke({"query": df_query})
# Menampilkan output
format_parser_output(parser_output)
{'Name': {0: 'Braund, '
'Mr. '
'Owen '
'Harris',
1: 'Cumings, '
'Mrs. '
'John '
'Bradley '
'(Florence '
'Briggs '
'Thayer)',
2: 'Heikkinen, '
'Miss. '
'Laina',
3: 'Futrelle, '
'Mrs. '
'Jacques '
'Heath '
'(Lily '
'May '
'Peel)',
4: 'Allen, '
'Mr. '
'William '
'Henry',
5: 'Moran, '
'Mr. '
'James',
6: 'McCarthy, '
'Mr. '
'Timothy '
'J',
7: 'Palsson, '
'Master. '
'Gosta '
'Leonard',
8: 'Johnson, '
'Mrs. '
'Oscar '
'W '
'(Elisabeth '
'Vilhelmina '
'Berg)',
9: 'Nasser, '
'Mrs. '
'Nicholas '
'(Adele '
'Achem)',
10: 'Sandstrom, '
'Miss. '
'Marguerite '
'Rut',
11: 'Bonnell, '
'Miss. '
'Elizabeth',
12: 'Saundercock, '
'Mr. '
'William '
'Henry',
13: 'Andersson, '
'Mr. '
'Anders '
'Johan',
14: 'Vestrom, '
'Miss. '
'Hulda '
'Amanda '
'Adolfina',
15: 'Hewlett, '
'Mrs. '
'(Mary '
'D '
'Kingcome) ',
16: 'Rice, '
'Master. '
'Eugene',
17: 'Williams, '
'Mr. '
'Charles '
'Eugene',
18: 'Vander '
'Planke, '
'Mrs. '
'Julius '
'(Emelia '
'Maria '
'Vandemoortele)',
19: 'Masselmani, '
'Mrs. '
'Fatima'}}
Contoh untuk mencari baris pertama.
# Contoh untuk menampilkan baris pertama
df_query = "Tampilkan baris pertama."
# Menjalankan chain
parser_output = chain.invoke({"query": df_query})
# Menampilkan hasil
format_parser_output(parser_output)
{'0': {'Age': 22.0,
'Cabin': nan,
'Embarked': 'S',
'Fare': 7.25,
'Name': 'Braund, '
'Mr. '
'Owen '
'Harris',
'Parch': 0,
'PassengerId': 1,
'Pclass': 3,
'Sex': 'male',
'SibSp': 1,
'Survived': 0,
'Ticket': 'A/5 '
'21171'}}
Contoh tugas untuk mencari rata-rata dari beberapa baris dalam kolom tertentu.
# Menghitung rata-rata usia dari baris 0 hingga 4
df["Age"].head().mean()
31.2