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.
"""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)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(), dandescribe(), menangkap sebagian besar masalah data sebelum analisis dibangun. describe()hanya meringkas kolom numerik secara bawaan, sehingga kolom teks memerlukanvalue_counts()atauinclude="all".- Indeks adalah label baris yang tetap nomor selama belum ada alasan, dan penyaringan membuatnya loncat secara normal.
Referensi#
- pandas 10 minutes to pandas — pandas documentation — pengantar resmi DataFrame, seleksi, dan agregasi.
- User Guide: Group by — pandas documentation — dokumentasi agregasi yang menjadi lanjutan topik ini.