Laporan yang kita susun jarang membutuhkan seluruh isi tabel: daftar hadir rapat cukup menampilkan kolom nama, sementara rekap gaji cukup menampilkan kolom gaji dan kota. Untuk kebutuhan seperti itu, DataFrame pandas menyediakan cara seleksi paling dasar: akses kurung siku dengan nama kolom. Pada Chapter ini kita mempraktikkan cara memilih satu kolom, memeriksa tipe hasil yang dikembalikan pandas, serta memahami konsekuensi penting yang berlaku sejak pandas 3.0: hasil seleksi berperilaku seperti copy. Pola lengkapnya dirangkum pada dokumentasi resmi Indexing and selecting data .
Akses Kurung Siku dengan Nama Kolom #
Untuk memilih satu kolom, tulis nama DataFrame lalu tambahkan kurung siku yang berisi string nama kolom. Pandas mengembalikan seluruh nilai kolom tersebut lengkap dengan index barisnya. Kita praktikkan pada data lima karyawan berikut; dataset kecil ini akan kita pakai secara konsisten di seluruh Chapter pada Section ini.
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"],
)
kolom_nama = karyawan["nama"]
print(kolom_nama)
print()
print(type(kolom_nama).__name__, kolom_nama.dtype)
kolom_nama.loc["E001"] = "Budi Santoso"
print(karyawan.loc["E001", "nama"])Output yang Dihasilkan:
E001 Budi
E002 Siti
E003 Dewi
E004 Andi
E005 Rina
Name: nama, dtype: str
Series str
BudiMari kita telaah peran setiap bagian kode di atas:
- Baris 3-11 (
karyawan = pd.DataFrame(...)): kita membangun DataFrame lima baris dengan empat kolom, lalu memberi label index eksplisit berupa nomor induk karyawanE001sampaiE005melalui argumenindex. - Baris 13 (
kolom_nama = karyawan["nama"]): akses kurung siku dengan satu string memilih kolomnama, dan hasilnya kita simpan ke variabelkolom_nama. - Baris 14-16:
print(kolom_nama)menampilkan isi kolom, kemudiantype(kolom_nama).__name__dankolom_nama.dtypemenegaskan tipe objek serta tipe data hasil seleksi. - Baris 18-19: kita mengubah satu nilai pada
kolom_namalewat.loc, lalu mencetak nilai yang sama langsung darikaryawanuntuk membuktikan apakah data asli ikut berubah.
Hasil Seleksi Berupa Series #
Perhatikan output pertama: pandas menampilkan lima nilai nama dengan index E001 sampai E005, diakhiri baris keterangan Name: nama, dtype: str. Output tersebut adalah Series, bukan DataFrame. Baris Name: nama menyimpan nama kolom asal, sehingga kita selalu dapat melacak dari kolom mana sebuah Series berasal. Dtype-nya str, yaitu tipe data string bawaan pandas 3.0 yang sudah kita kenal pada Section Dasar Series.
Menulis Kolom sebagai Atribut #
Pandas juga mengizinkan penulisan kolom sebagai atribut, misalnya karyawan.umur, dan hasilnya tetap Series. Bentuk ini lebih pendek, tetapi kurung siku tetap menjadi pola utama karena dua alasan. Pertama, akses atribut hanya bekerja untuk nama kolom yang merupakan identifier Python yang valid, misalnya nama tanpa spasi. Kedua, nama kolom yang bentrok dengan atribut atau method DataFrame membingungkan: pada DataFrame yang memiliki kolom bernama sum, penulisan df.sum tetap mengembalikan method sum(), bukan kolomnya, sedangkan df["sum"] selalu mengembalikan kolom.
Konsekuensi Copy-on-Write #
Sekarang perhatikan dua baris output terakhir. Baris 18 mengganti nilai kolom_nama pada label E001 menjadi Budi Santoso, tetapi baris 19 yang membaca langsung dari karyawan tetap mencetak Budi. Perilaku ini berasal dari Copy-on-Write
yang selalu aktif di pandas 3.0: setiap hasil seleksi, termasuk satu kolom, berperilaku seperti copy yang berdiri sendiri. Modifikasi pada kolom_nama hanya berlaku pada salinannya, sehingga karyawan tidak ikut berubah.
Sampai di sini kita sudah bisa mengambil satu kolom sebagai Series dan memahami sifat hasilnya. Kebutuhan berikutnya biasanya lebih spesifik: mengambil beberapa kolom sekaligus dalam satu pernyataan. Cara tersebut, beserta kendali atas urutan kolomnya, kita bahas pada Chapter berikutnya.