Sebagian besar laporan menampilkan lebih dari satu kolom: daftar hadir memuat nama dan kota, sementara rekap gaji memuat nama dan jumlah gaji. Memanggil karyawan["nama"] berulang-ulang untuk setiap kolom tentu merepotkan. Pandas memperluas akses kurung siku: alih-alih satu string, kita memberikan list berisi beberapa nama kolom. Chapter ini membahas cara menulis seleksi tersebut, cara mengatur urutan hasil, dan perilaku DataFrame baru yang dihasilkan.

Kurung Siku Ganda dengan List Nama Kolom #

Untuk memilih beberapa kolom sekaligus, tulis dua pasang kurung siku: kurung luar adalah operator seleksi pandas, sedangkan kurung dalam adalah list Python berisi nama-nama kolom. Pandas membaca setiap nama di dalam list, mengambil kolom yang cocok, lalu menyusunnya menjadi DataFrame baru. Kita coba pada data karyawan yang sama dengan Chapter sebelumnya, sebagaimana dijelaskan pada panduan Indexing and selecting data .

python
import pandas as pd

karyawan = pd.DataFrame(
    {
        "nama": ["Budi", "Siti", "Dewi", "Andi", "Rina"],
        "kota": ["Bandung", "Jakarta", "Surabaya", "Bandung", "Medan"],
        "umur": [29, 34, 25, 31, 27],
        "gaji": [8500000, 10500000, 7200000, 9800000, 8000000],
    },
    index=["E001", "E002", "E003", "E004", "E005"],
)

ringkas = karyawan[["nama", "kota"]]
print(ringkas)
print()
print(type(ringkas).__name__)
print()

urut_lain = karyawan[["gaji", "nama"]]
print(urut_lain)

Output yang Dihasilkan:

text
      nama      kota
E001  Budi   Bandung
E002  Siti   Jakarta
E003  Dewi  Surabaya
E004  Andi   Bandung
E005  Rina     Medan

DataFrame

          gaji  nama
E001   8500000  Budi
E002  10500000  Siti
E003   7200000  Dewi
E004   9800000  Andi
E005   8000000  Rina

Mari kita telaah peran setiap bagian kode di atas:

  1. Baris 3-11 (karyawan = pd.DataFrame(...)): dataset lima karyawan yang sama dengan Chapter sebelumnya, lengkap dengan label index E001 sampai E005.
  2. Baris 13 (ringkas = karyawan[["nama", "kota"]]): list ["nama", "kota"] di dalam kurung siku memilih dua kolom sekaligus, dan hasilnya disimpan sebagai DataFrame ringkas.
  3. Baris 14-16: print(ringkas) menampilkan tabel dua kolom, lalu type(ringkas).__name__ menegaskan bahwa hasilnya bertipe DataFrame, bukan Series.
  4. Baris 19-20: seleksi kedua meminta kolom gaji lebih dulu, sehingga kita bisa mengamati urutan hasilnya.

Urutan Kolom Mengikuti Daftar #

Perhatikan output kedua: urut_lain menampilkan kolom gaji sebelum kolom nama, padahal di karyawan kolom nama muncul lebih dulu. Urutan hasil selalu mengikuti urutan list yang kita tulis, sehingga seleksi ini sekaligus menjadi cara menata ulang kolom. Bila sebuah nama ditulis dua kali, misalnya karyawan[["nama", "nama"]], pandas menampilkan dua kolom identik dengan nama tersebut. Sifat ini berguna ketika format laporan menuntut susunan kolom tertentu.

Seleksi Lewat Variabel List #

Daftar kolom juga boleh disimpan di variabel, lalu variabel itulah yang diberikan ke kurung siku. Pola kolom_pilihan = ["kota", "umur"] diikuti karyawan[kolom_pilihan] menghasilkan DataFrame dengan kedua kolom tersebut. Pendekatan ini lebih mudah dibaca saat daftar kolomnya panjang, dan menjadi kebutuhan ketika daftar kolom dibangun secara dinamis, misalnya dari berkas konfigurasi atau pilihan pengguna.

Hasil Seleksi Merupakan DataFrame Baru #

Hasil seleksi beberapa kolom adalah DataFrame baru yang berdiri sendiri. Sejak pandas 3.0 dengan Copy-on-Write yang selalu aktif, mengubah nilai pada ringkas tidak pernah memengaruhi karyawan, demikian pula sebaliknya. Dengan kata lain, kita bebas memodifikasi hasil seleksi tanpa risiko mengubah data sumber. Bila niatnya memodifikasi data asli, lakukan penulisan langsung pada karyawan melalui satu akses .loc.

Seleksi pada dimensi kolom sudah kita kuasai, mulai dari satu kolom hingga beberapa kolom dengan urutan bebas. Dimensi berikutnya adalah baris: bagaimana mengambil satu baris berdasarkan label index seperti E002. Property .loc yang kita bahas pada Chapter berikutnya dibuat khusus untuk kebutuhan itu.