05. Dataframe Output Parser Pandas Dataframe Output Parser

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.

Python
from dotenv import load_dotenv
 
load_dotenv()
Output
True
Python
from langchain_altero import logging
 
# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Output
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
Python
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
Python
# 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.

Python
# 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 variabel df.
  • Gunakan PandasDataFrameOutputParser untuk mem-parsing DataFrame.
Python
# Mendefinisikan Pandas DataFrame yang diinginkan
df = pd.read_csv("/content/titanic.csv")
df.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale2210A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female3810PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale2600STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female351011380353.1000C123S
4503Allen, Mr. William Henrymale35003734508.0500NaNS
Python
# 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.

Python
# 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)
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.

Python
# 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)
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.

Python
# Menghitung rata-rata usia dari baris 0 hingga 4
df["Age"].head().mean()
Output
31.2