Idenya
pandas adalah library Python yang dipakai data analyst untuk mengolah tabel. Bayangkan spreadsheet yang kamu kendalikan dengan kode: kamu bisa memuat data, membersihkannya, menghitung kolom baru dan merangkumnya, lalu menjalankan langkah yang persis sama lagi bulan depan dengan satu klik. Tidak perlu lagi mengulang laporan secara manual.
Semua hal di pandas dibangun dari dua objek:
- Series: satu kolom nilai, dengan label untuk setiap nilai
- DataFrame: tabel yang terdiri dari beberapa Series yang memakai label baris yang sama
Kuasai dua hal ini dengan baik, dan sisa pandas tinggal soal "method apa yang harus aku panggil di DataFrame-ku?".
Sudah jadi kebiasaan, semua orang meng-import pandas dengan nama pendek pd. Kamu akan melihat baris ini di bagian atas hampir setiap script data di dunia:
import pandas as pd
Series: satu kolom berlabel
Series adalah satu kolom data, seperti kolom harga di daftar produk. Cara termudah membuatnya adalah dari list Python biasa berisi nilai-nilai:
import pandas as pd
prices = pd.Series([95000, 65000, 110000])
print(prices)
0 95000
1 65000
2 110000
dtype: int64
Ada dua kolom di output itu, tapi hanya satu yang berisi datamu. Angka di sebelah kiri (0, 1, 2) adalah index: label dari setiap nilai. pandas menambahkan index bernomor untukmu kalau kamu tidak memberikannya. Di bagian bawah, dtype: int64 adalah tipe data, artinya setiap nilai adalah bilangan bulat 64-bit. Sebuah Series selalu punya satu dtype untuk semua nilainya, dan itulah yang membuatnya cepat.
Label bernomor memang cukup, tapi label yang bermakna lebih baik. Berikan labelmu sendiri dengan index=:
prices = pd.Series(
[95000, 65000, 110000],
index=["Arabica Gayo", "Robusta Lampung", "Toraja Kalosi"],
)
print(prices)
print(prices["Toraja Kalosi"])
Arabica Gayo 95000
Robusta Lampung 65000
Toraja Kalosi 110000
dtype: int64
110000
Sekarang kamu bisa mencari nilai berdasarkan labelnya, seperti dictionary. Inilah perbedaan utama dengan list Python: Series tahu arti dari setiap nilainya.
Matematika pada seluruh kolom sekaligus
Kekuatan sebenarnya terlihat saat kamu berhitung. Operasi pada Series berlaku untuk setiap nilai, tanpa perlu loop:
with_tax = prices * 1.11
print(with_tax)
Arabica Gayo 105450.0
Robusta Lampung 72150.0
Toraja Kalosi 122100.0
dtype: float64
Ini disebut operasi tervektorisasi (vectorised). Lebih pendek dari loop, lebih mudah dibaca, dan jauh lebih cepat untuk data besar. Perhatikan dtype-nya berubah menjadi float64, karena mengalikan dengan bilangan desimal menghasilkan desimal.
DataFrame: satu tabel utuh
DataFrame adalah yang paling sering akan kamu pakai. Cara termudah membuatnya secara manual adalah dari dictionary berisi list: setiap key menjadi nama kolom, dan setiap list menjadi nilai kolom tersebut.
orders = pd.DataFrame({
"product": ["Arabica Gayo", "Ceramic Mug", "French Press", "Robusta Lampung"],
"quantity": [3, 2, 1, 4],
"unit_price": [95000, 55000, 185000, 65000],
})
print(orders)
product quantity unit_price
0 Arabica Gayo 3 95000
1 Ceramic Mug 2 55000
2 French Press 1 185000
3 Robusta Lampung 4 65000
Setiap list harus punya panjang yang sama, karena setiap posisi adalah satu baris. Beberapa attribute memberi tahu bentuk tabelnya:
print(orders.shape) # (baris, kolom)
print(orders.columns) # nama-nama kolom
print(orders.dtypes) # tipe setiap kolom
(4, 3)
Index(['product', 'quantity', 'unit_price'], dtype='object')
product object
quantity int64
unit_price int64
dtype: object
object adalah sebutan pandas untuk "objek Python umum", yang untuk saat ini artinya teks. Perhatikan bahwa shape tidak diikuti tanda kurung: ini adalah attribute (fakta yang tersimpan), bukan method yang kamu panggil.
Di situs ini kamu bisa memakai display(orders) alih-alih print(orders) untuk menampilkan DataFrame sebagai tabel yang rapi, seperti di Jupyter notebook. Keduanya bisa dipakai.
Satu kolom adalah Series
Ambil satu kolom dengan kurung siku dan namanya. Yang kamu dapat adalah sebuah Series:
print(orders["quantity"])
0 3
1 2
2 1
3 4
Name: quantity, dtype: int64
Itulah model mentalnya: DataFrame adalah kumpulan Series yang direkatkan oleh index yang sama. Semua yang bisa kamu lakukan pada Series, bisa kamu lakukan pada sebuah kolom.
Menambahkan kolom hasil perhitungan
Untuk menambah kolom, assign ke nama baru. Karena kolom adalah Series, perhitungannya tervektorisasi di setiap baris:
orders["revenue"] = orders["quantity"] * orders["unit_price"]
print(orders)
product quantity unit_price revenue
0 Arabica Gayo 3 95000 285000
1 Ceramic Mug 2 55000 110000
2 French Press 1 185000 185000
3 Robusta Lampung 4 65000 260000
pandas mengalikan baris 0 dengan baris 0, baris 1 dengan baris 1, dan seterusnya. Di spreadsheet kamu akan menulis rumus di sel pertama lalu menariknya ke bawah. Di sini, satu baris kode mengerjakan semua baris.
Ringkasan cepat
Begitu kamu punya sebuah kolom, pertanyaan pertamanya biasanya sama: berapa totalnya, berapa rata-ratanya, berapa yang terbesar? Setiap Series punya method bawaan yang langsung menjawabnya, tanpa perlu loop:
print(orders["revenue"].sum()) # 840000
print(orders["revenue"].mean()) # 210000.0
print(orders["unit_price"].max()) # 185000
Method berguna lainnya adalah .min(), .count() dan .round(1), yang membulatkan setiap nilai ke satu angka desimal. Kamu akan bertemu lebih banyak lagi di modul-modul berikutnya.
Nama kolom peka huruf besar-kecil dan harus sama persis. orders["Quantity"] memunculkan KeyError karena kolomnya bernama quantity. Kalau kamu mendapat KeyError, print orders.columns dan bandingkan.
Mengapa ini penting untuk kode yang bersih
Dua kebiasaan dimulai di sini. Pertama, beri nama DataFrame sesuai isinya: orders, customers, daily_sales. Kode yang penuh df, df2 dan df_final mustahil diikuti seminggu kemudian. Kedua, utamakan operasi tervektorisasi dibanding loop. orders["quantity"] * orders["unit_price"] menyatakan maksudmu dengan tepat dalam satu baris, dan berjalan cepat bahkan untuk sejuta baris.
Rangkuman
import pandas as pdadalah import standarnya.- Series adalah satu kolom nilai dengan index (label) dan satu dtype.
- DataFrame adalah tabel: beberapa Series yang berbagi index. Buat dari dictionary berisi list.
df["col"]memberimu satu kolom sebagai Series.df["new"] = ...menambahkan kolom.- Perhitungan pada Series berlaku untuk setiap nilai sekaligus (tervektorisasi).
.shape,.columnsdan.dtypesmendeskripsikan DataFrame..sum(),.mean(),.max()merangkum satu kolom.