Dasar Pandas

Series dan DataFrame, membaca data, serta pemeriksaan pertama atas tabel.

Daftar isi

pandas adalah perkakas utama manipulasi data tabel pada Python, dan titik masuknya adalah dua struktur, yaitu Series untuk satu kolom dan DataFrame untuk seluruh tabel. Topik ini membangun keduanya dari data kecil, memeriksa isi tabel dengan cara yang wajib menjadi kebiasaan, dan menutupnya dengan ringkasan statistik pertama. Setelah membacanya, setiap tabel baru pada modul berikutnya dapat diselidiki dengan urutan pemeriksaan yang tetap.

Series dan DataFrame#

Series adalah satu kolom berlabel dengan tipe yang seragam, sedangkan DataFrame adalah kumpulan Series yang berbagi indeks, sehingga menyerupai tabel dengan baris dan kolom bernama. DataFrame dapat dibangun dari kamus yang kuncinya menjadi nama kolom, dan dari berkas melalui pd.read_csv yang akan dibahas penuh pada modul mendapatkan data.

Satu kolom yang diambil dari DataFrame adalah Series, dan perbedaan itu berdampak nyata. Beberapa operasi hanya berlaku pada satu kolom, misalnya value_counts, sedangkan operasi tabel bekerja pada seluruh DataFrame. Skrip berikut memperlihatkan keduanya beserta pemeriksaan pertama.

python pandas_dasar.py
"""Titik masuk pandas: Series, DataFrame, dan pemeriksaan pertama."""
import pandas as pd

data = pd.DataFrame(
    {
        "stasiun": ["Stasiun A"] * 3 + ["Stasiun B"] * 3,
        "pm25": [34.0, 41.5, 28.0, 52.3, 47.0, 61.2],
        "suhu_c": [31.0, 32.5, 30.0, 33.1, 33.8, 34.0],
    }
)

print(type(data["pm25"]).__name__)            # satu kolom = Series
print(data.head(3).to_string(index=False))
print()
print(data[["pm25", "suhu_c"]].describe().round(1).to_string())
print()
print(data.shape)
text Keluaran
Series
  stasiun  pm25  suhu_c
Stasiun A  34.0    31.0
Stasiun A  41.5    32.5
Stasiun A  28.0    30.0

       pm25  suhu_c
count   6.0     6.0
mean   44.0    32.4
std    12.1     1.6
min    28.0    30.0
25%    35.9    31.4
50%    44.2    32.8
75%    51.0    33.6
max    61.2    34.0

(6, 3)

Kolom stasiun tersimpan sebagai teks sedangkan dua kolom lainnya numerik, dan inilah alasan describe() hanya menampilkan dua kolom tersebut, yaitu secara bawaan ia meringkas kolom numerik saja.

Urutan pemeriksaan pertama atas tabel baru#

Tabel baru tidak langsung dianalisis, melainkan diperiksa dengan urutan yang tetap, dan kebiasaan ini menangkap sebagian besar masalah sebelum menjadi kesalahan. Urutannya lima langkah, yaitu head() untuk melihat bentuk barisnya, shape untuk menghitung ukurannya, dtypes untuk memeriksa tipe setiap kolom, isna().sum() untuk menghitung nilai hilang per kolom, dan describe() untuk ringkasan statistik kolom numerik.

Urutan tersebut bukan formalitas. Baris pertama yang terlihat wajar bisa menyembunyikan 300 baris terakhir yang kosong, dan tipe kolom yang salah hanya terlihat pada dtypes, bukan pada head(). Nilai -999 yang menjadi kode data hilang juga tidak menonjol pada head(), tetapi langsung mencolok pada describe() sebagai nilai minimum yang jauh dari yang lain.

Pada dataset yang berantakan sepanjang jalur ini, urutan lima langkah itulah yang dipakai pada setiap topik pembersihan, dan setiap keluaran pembersihan diawali dengan pemanggilan yang sama. Keajekan pemeriksaan membuat perubahan antar langkah mudah dibandingkan.

Indeks dan artinya bagi analisis#

Indeks adalah label baris, dan secara bawaan pandas memberi nomor 0 sampai n. Indeks dapat diganti menjadi kolom yang bermakna, misalnya waktu pengukuran, melalui set_index, dan pilihan ini memengaruhi cara pemilihan baris yang dibahas pada modul seleksi.

Dua perilaku indeks yang perlu diketahui sejak awal. Pertama, indeks tidak otomatis berurutan kembali setelah baris disaring, sehingga angka loncatan pada hasil filter adalah hal normal, dan reset_index(drop=True) memulihkannya bila diperlukan. Kedua, penggabungan dua tabel membandingkan indeksnya pada operasi tertentu, sehingga indeks yang tidak disengaja dapat mengubah hasil join.

Aturan praktisnya sederhana, yaitu biarkan indeks nomor selama belum ada alasan nyata, lalu jadikan kolom waktu sebagai indeks ketika pekerjaan mulai berorientasi deret waktu, sebagaimana dipakai pada modul EDA dan visualisasi.

Kesalahan umum#

Kesalahan pertama adalah menyimpulkan kualitas data dari beberapa baris pertama. head() hanya jendela kecil, sedangkan dtypes, isna().sum(), dan describe() melihat seluruh kolom, dan ketiganya murah dijalankan.

Kesalahan kedua adalah mengira describe() menampilkan semua kolom. Kolom teks dilewati secara bawaan, sehingga kolom kategori yang salah tulis tidak terlihat padanya. include="all" menampilkannya bila diperlukan, dan value_counts() melihat distribusinya secara langsung.

Kesalahan ketiga adalah mencetak tabel besar tanpa kebutuhan. Notebook yang memuntahkan ribuan baris menyulitkan pembaca, sedangkan head(), tail(), dan sample(5) menyajikan potongan yang cukup untuk memastikan bentuknya.

Ringkasan#

  • Series adalah satu kolom berlabel, sedangkan DataFrame adalah kumpulan Series yang berbagi indeks.
  • Pemeriksaan pertama yang tetap, yaitu head, shape, dtypes, isna().sum(), dan describe(), menangkap sebagian besar masalah data sebelum analisis dibangun.
  • describe() hanya meringkas kolom numerik secara bawaan, sehingga kolom teks memerlukan value_counts() atau include="all".
  • Indeks adalah label baris yang tetap nomor selama belum ada alasan, dan penyaringan membuatnya loncat secara normal.

Referensi#