DataLens

Dasar Series dan DataFrame

Kenalan dengan dua fondasi pandas, yaitu Series (satu kolom berlabel) dan DataFrame (satu tabel utuh).

Level: Dasar · 9 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

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:

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.

Tips

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.

Awas

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

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: Membuat DataFrame dan membaca CSV →