Pandas & NumPy Academy · Pelajaran

Metode query()

Tulis ekspresi penyaringan yang mudah dibaca sebagai String dengan query(), gunakan variabel Python dalam kueri dengan @, dan rangkai beberapa penyaring

Pelajaran 2 dari 413 langkah

Metode query() adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Mengapa Menggunakan query()?

Pengindeksan boolean Pandas sangat bermanfaat, tetapi dapat menjadi panjang ketika menggabungkan banyak kondisi. Metode query() memungkinkan Anda menulis ekspresi filter sebagai string biasa, yang menurut banyak orang lebih mudah dibaca — terutama mereka yang terbiasa dengan SQL. Alih-alih menggunakan df[(df['age'] > 30) & (df['salary'] > 50000)], Anda dapat menulis df.query('age > 30 and salary > 50000').

String query dievaluasi terhadap nama kolom pada DataFrame, sehingga nama kolom berperan seperti nama variabel di dalam string tersebut.

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Carol', 'Dave'],
    'age': [25, 35, 28, 45],
    'salary': [50000, 90000, 70000, 120000]
})

# Boolean indexing style
result1 = df[(df['age'] > 27) & (df['salary'] > 60000)]

# Equivalent query() style
result2 = df.query('age > 27 and salary > 60000')

print(result2)
#     name  age  salary
# 1    Bob   35   90000
# 2  Carol   28   70000

Aturan Sintaks di Dalam String Query

Di dalam string query, Anda dapat menggunakan operator perbandingan Python standar (>, <, ==, !=, >=, <=) dan penghubung logika and, or, not. Berbeda dari pengindeksan boolean biasa, Anda dapat menggunakan kata-kata bahasa Inggris di sini — tidak perlu ampersand atau pipe.

Nama kolom yang mengandung spasi atau bertabrakan dengan kata kunci Python harus diapit tanda backtick: df.query('`first name` == "Alice"').

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'price': [10, 200, 50, 300],
    'in_stock': [True, False, True, True]
})

# Use 'and', 'or', 'not' in query strings
result = df.query('price > 40 and in_stock == True')
print(result)
#   product  price  in_stock
# 2       C     50      True
# 3       D    300      True

Merujuk Variabel Python dengan @

Salah satu fitur utama query() adalah kemampuan untuk merujuk variabel Python dari lingkup di sekitarnya menggunakan awalan @. Dengan demikian, parameter filter dapat ditentukan dengan mudah: hitung suatu ambang, simpan nilainya dalam variabel, lalu gunakan @variable_name di dalam string query, bukan menuliskan nilainya secara langsung.

Pola ini sangat berguna dalam fungsi yang menerima argumen filter saat dijalankan.

import pandas as pd

df = pd.DataFrame({
    'city': ['NYC', 'LA', 'Chicago', 'Houston'],
    'population': [8336817, 3979576, 2693976, 2320268]
})

min_pop = 3_000_000  # Python variable

# Use @ to inject the variable into the query
result = df.query('population > @min_pop')
print(result)
#    city  population
# 0   NYC     8336817
# 1    LA     3979576

Merangkai Pemanggilan query()

Karena query() mengembalikan DataFrame baru, Anda dapat merangkai beberapa pemanggilan query atau menggabungkannya dengan metode Pandas lainnya dalam pipeline. Perangkaian membuat setiap langkah penyaringan berada pada barisnya sendiri, sehingga logikanya mudah dibaca, ditelusuri kesalahannya, dan diubah.

Anda juga dapat merangkai query() dengan metode seperti .groupby(), .sort_values(), atau .head() untuk membangun pipeline analisis yang ringkas.

import pandas as pd

df = pd.DataFrame({
    'region': ['North', 'South', 'North', 'East', 'South'],
    'year': [2022, 2022, 2023, 2023, 2023],
    'revenue': [100, 200, 150, 80, 300]
})

# Chain two query calls
result = (df
    .query('year == 2023')
    .query('revenue > 100')
    .sort_values('revenue', ascending=False)
)
print(result)
#    region  year  revenue
# 4   South  2023      300
# 2   North  2023      150

Membandingkan query() dengan Pengindeksan Boolean

Kedua metode menghasilkan hasil yang sama, tetapi masing-masing memiliki kegunaan tersendiri. query() unggul untuk filter dengan banyak kondisi yang memerlukan banyak tanda kurung jika menggunakan pengindeksan boolean. Pengindeksan boolean lebih baik ketika kondisi Anda melibatkan ekspresi Python yang kompleks, seperti pemanggilan metode yang tidak didukung dalam string query.

Performanya serupa dalam kebanyakan kasus; query() dapat sedikit lebih cepat pada DataFrame yang sangat besar karena menggunakan pustaka numexpr di balik layar.

import pandas as pd

df = pd.DataFrame({
    'A': range(10),
    'B': range(10, 20)
})

# Boolean indexing
result_bool = df[(df['A'] > 2) & (df['B'] < 18) & (df['A'] != 5)]

# Equivalent query — much more readable
result_query = df.query('A > 2 and B < 18 and A != 5')

print(result_query)
#    A   B
# 3  3  13
# 4  4  14
# 6  6  16
# 7  7  17

Perbandingan String dalam query()

Anda dapat memfilter nilai kolom string di dalam string query dengan mengapit literal string menggunakan tanda kutip. Gunakan tanda kutip ganda untuk string query bagian luar dan tanda kutip tunggal untuk nilai string, atau sebaliknya — yang penting konsisten. Perhatikan bahwa query() tidak mendukung metode .str seperti contains(); untuk itu, gunakan pengindeksan boolean dengan .str.

import pandas as pd

df = pd.DataFrame({
    'country': ['USA', 'UK', 'Canada', 'USA', 'Germany'],
    'sales': [400, 150, 200, 600, 300]
})

# Single quotes for the string value inside double-quoted query
result = df.query('country == "USA"')
print(result)
#   country  sales
# 0     USA    400
# 3     USA    600

Menggunakan Operator in dan not in

Di dalam string query, Pandas mendukung operator in dan not in untuk menguji keanggotaan, serupa dengan daftar Python. Ini merupakan alternatif yang rapi dibandingkan merangkai beberapa kondisi == dengan or. Daftar nilainya ditulis langsung di dalam string query.

import pandas as pd

df = pd.DataFrame({
    'status': ['active', 'inactive', 'pending', 'active', 'closed'],
    'amount': [100, 200, 50, 300, 150]
})

# Keep rows where status is in a specific list
result = df.query('status in ["active", "pending"]')
print(result)
#     status  amount
# 0   active     100
# 2  pending      50
# 3   active     300

# Exclude certain statuses
excluded = df.query('status not in ["closed", "inactive"]')
print(excluded.shape)  # (3, 2)

Filter Rentang Numerik dengan query()

Perbandingan berantai Python seperti 10 < price < 500 dapat digunakan di dalam string query, sehingga filter rentang menjadi sangat ekspresif. Hal ini tidak dapat dilakukan dengan pengindeksan boolean standar tanpa menggunakan between() atau dua kondisi terpisah yang digabungkan dengan &.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D', 'E'],
    'price': [5, 50, 150, 300, 500]
})

# Chained comparison — only works inside query()
result = df.query('50 <= price <= 300')
print(result)
#   product  price
# 1       B     50
# 2       C    150
# 3       D    300

Keterbatasan query()

query() sangat bermanfaat, tetapi memiliki beberapa keterbatasan. Nama kolom yang mengandung spasi atau karakter khusus memerlukan tanda backtick. Ekspresi Python yang sangat kompleks, seperti fungsi khusus atau logika multi-baris, tidak didukung di dalam string. Selain itu, query() dapat menghasilkan hasil yang tidak terduga jika nama kolom bertabrakan dengan kata kunci Python seperti class atau if — gunakan tanda backtick untuk nama tersebut juga.

Untuk hal-hal yang tidak dapat dinyatakan dengan rapi oleh query(), gunakan kembali pengindeksan boolean standar.

import pandas as pd

df = pd.DataFrame({'first name': ['Alice', 'Bob'], 'class': [1, 2]})

# Backtick-quote column names with spaces or reserved words
result = df.query('`first name` == "Alice" and `class` == 1')
print(result)
#   first name  class
# 0      Alice      1

Contoh Praktis: Memfilter Pesanan

Berikut demonstrasi praktis yang menggabungkan query() dengan referensi variabel dan perangkaian ke groupby. Pola ini — memfilter terlebih dahulu, lalu melakukan agregasi — menghindari pemrosesan baris yang tidak diperlukan, sehingga lebih jelas dan lebih cepat pada dataset besar.

import pandas as pd

orders = pd.DataFrame({
    'region': ['East', 'West', 'East', 'West', 'East'],
    'year': [2023, 2023, 2024, 2024, 2024],
    'revenue': [100, 200, 300, 400, 500]
})

min_year = 2024

# Filter to recent orders in the East region, then sum revenue
summary = (
    orders
    .query('year >= @min_year and region == "East"')
    .groupby('region')['revenue'].sum()
)
print(summary)
# region
# East    800
# Name: revenue, dtype: int64

Praktik Terbaik query() dan Perangkaian Metode

Menggunakan query() di dalam rangkaian metode merupakan praktik terbaik dalam kode Pandas modern. Cara ini membuat setiap langkah pipeline transformasi menjadi jelas dan terdokumentasi dengan sendirinya. Apit seluruh rangkaian dengan tanda kurung agar Anda dapat membaginya menjadi beberapa baris tanpa garis miring terbalik.

Gabungkan query() dengan assign() untuk menambahkan kolom, groupby() untuk agregasi, dan pipe() untuk fungsi khusus guna membangun pipeline yang sepenuhnya mudah dibaca.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
    'salary': [90000, 50000, 120000, 70000, 55000],
    'years': [3, 5, 8, 2, 4]
})

result = (
    df
    .query('years > 2 and dept != "HR"')
    .assign(bonus=lambda x: x['salary'] * 0.1)
    .sort_values('salary', ascending=False)
)
print(result[['dept', 'salary', 'bonus']])
#    dept  salary   bonus
# 2   Eng  120000  12000.0
# 0   Eng   90000   9000.0

Pemeriksaan Singkat

Uji pemahaman Anda tentang metode query().

Ringkasan Pelajaran

Dalam pelajaran ini, Anda telah mempelajari bahwa: query() menerima ekspresi filter sebagai string sehingga filter dengan banyak kondisi lebih mudah dibaca, @variable_name memasukkan variabel Python ke dalam query, dan Anda dapat menggunakan in/not in serta perbandingan berantai yang tidak tersedia dalam pengindeksan boolean standar. Selanjutnya, kita akan mempelajari isin() dan between() untuk filter keanggotaan dan rentang yang ringkas.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Metode query()” gratis?

Ya — teks lengkap “Metode query()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Metode query()”?

Tulis ekspresi penyaringan yang mudah dibaca sebagai String dengan query(), gunakan variabel Python dalam kueri dengan @, dan rangkai beberapa penyaring Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Metode query()” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengindeksan Boolean pada DataFrames
  2. Metode query()
  3. Penyaring isin() dan between()
  4. Memilih Kolom Berdasarkan Pola
← Kembali ke Pandas & NumPy Academy