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)
  • Baca data dari file titanic.csv, lalu muat ke dalam DataFrame dan tetapkan ke variabel df.

  • Gunakan PandasDataFrameOutputParser untuk mem-parsing DataFrame.

# Mendefinisikan Pandas DataFrame yang diinginkan
df = pd.read_csv("/content/titanic.csv")
df.head()
# 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

Last updated