Metode query()
Tulis ekspresi penyaringan yang mudah dibaca sebagai String dengan query(), gunakan variabel Python dalam kueri dengan @, dan rangkai beberapa penyaring
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 70000Aturan 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 TrueMerujuk 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 3979576Merangkai 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 150Membandingkan 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 17Perbandingan 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 600Menggunakan 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 300Keterbatasan 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 1Contoh 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: int64Praktik 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.0Pemeriksaan 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.
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
- Pengindeksan Boolean pada DataFrames
- Metode query()
- Penyaring isin() dan between()
- Memilih Kolom Berdasarkan Pola