Array NumPy dari chapter Dasar NumPy cepat, tetapi tetap miskin: kolom tanpa nama, baris tanpa identitas, dan file CSV tanpa tipe angka. pandas menutup semua celah itu dengan dua struktur berlabel — Series dan DataFrame — yang dibangun langsung di atas ndarray. Chapter ini memperkenalkan keduanya, membaca file CSV sungguhan, dan menyiapkan alur kerja yang akan dipakai sepanjang sisa section.
Dua Struktur Inti: Series dan DataFrame #
Model mentalnya sederhana: Series adalah satu kolom berlabel, DataFrame adalah tabel berisi banyak Series. Membuat Series tanpa label menghasilkan indeks angka otomatis:
import pandas as pd
harga = pd.Series([150000, 99000, 750000, 250000, 350000])
print(harga)
print()
print("values:", harga.values)
print("index :", harga.index)
print("dtype :", harga.dtype)Output yang Dihasilkan:
0 150000
1 99000
2 750000
3 250000
4 350000
dtype: int64
values: [150000 99000 750000 250000 350000]
index : RangeIndex(start=0, stop=5, step=1)
dtype : int64Perhatikan bahwa harga.values adalah array NumPy — inilah bukti nyata bahwa pandas berdiri di atas NumPy. Kekuatan Series baru terasa ketika indeksnya diganti label yang bermakna:
import pandas as pd
harga = pd.Series(
[150000, 99000, 750000],
index=["Mouse Wireless", "Novel Laskar Pelangi", "Keyboard Mekanik"],
name="harga",
)
print(harga)
print()
print(harga["Novel Laskar Pelangi"])
print(harga["Mouse Wireless":"Novel Laskar Pelangi"])Output yang Dihasilkan:
Mouse Wireless 150000
Novel Laskar Pelangi 99000
Keyboard Mekanik 750000
Name: harga, dtype: int64
99000
Mouse Wireless 150000
Novel Laskar Pelangi 99000
Name: harga, dtype: int64Sekarang harga["Novel Laskar Pelangi"] mencari berdasarkan label, bukan posisi, dan slicing harga["Mouse Wireless":"Novel Laskar Pelangi"] menyertakan kedua ujungnya — berbeda dengan slicing list Python yang memotong ujung kanan.
Dataset Latihan dan Membaca CSV #
Seluruh chapter pandangan-pertama ini memakai satu dataset ritel fiktif — 24 transaksi penjualan sepanjang Januari sampai Maret 2025 di tiga kota. Simpan teks berikut sebagai penjualan.csv:
tanggal,kota,kategori,produk,harga,jumlah
2025-01-03,Jakarta,Elektronik,Mouse Wireless,150000,4
2025-01-06,Bandung,Fashion,Kaos Polos,95000,6
2025-01-09,Surabaya,Buku,Novel Laskar Pelangi,99000,5
2025-01-12,Jakarta,Elektronik,Keyboard Mekanik,750000,1
2025-01-15,Bandung,Elektronik,Powerbank 10000mAh,250000,3
2025-01-18,Surabaya,Fashion,Kemeja Flanel,185000,2
2025-01-21,Jakarta,Buku,Atlas Indonesia,150000,2
2025-01-24,Bandung,Elektronik,Speaker Bluetooth,350000,2
2025-01-27,Surabaya,Elektronik,Mouse Wireless,150000,3
2025-02-01,Jakarta,Fashion,Sepatu Sneakers,450000,1
2025-02-04,Bandung,Buku,Buku Masak,120000,4
2025-02-07,Surabaya,Elektronik,Powerbank 10000mAh,250000,2
2025-02-10,Jakarta,Fashion,Kaos Polos,95000,8
2025-02-13,Bandung,Buku,Novel Laskar Pelangi,99000,3
2025-02-16,Surabaya,Elektronik,Keyboard Mekanik,750000,1
2025-02-19,Jakarta,Elektronik,Speaker Bluetooth,350000,3
2025-02-22,Bandung,Fashion,Kemeja Flanel,185000,4
2025-02-25,Surabaya,Buku,Atlas Indonesia,150000,3
2025-03-01,Jakarta,Buku,Buku Masak,120000,2
2025-03-04,Bandung,Elektronik,Mouse Wireless,150000,5
2025-03-07,Surabaya,Fashion,Sepatu Sneakers,450000,2
2025-03-10,Jakarta,Fashion,Kaos Polos,95000,7
2025-03-13,Bandung,Buku,Buku Masak,120000,3
2025-03-16,Surabaya,Elektronik,Powerbank 10000mAh,250000,4Bandingkan file di atas dengan pengalaman chapter Membaca Data CSV di Section Data Processing: di sana kita menulis loop DictReader plus konversi tipe manual. Fungsi pd.read_csv() menangani semuanya — membaca file, menebak tipe setiap kolom, dan mengembalikan DataFrame — dalam satu langkah:
import pandas as pd
df = pd.read_csv("penjualan.csv")
print(df.head())
print()
print(df.tail(3))Output yang Dihasilkan:
tanggal kota kategori produk harga jumlah
0 2025-01-03 Jakarta Elektronik Mouse Wireless 150000 4
1 2025-01-06 Bandung Fashion Kaos Polos 95000 6
2 2025-01-09 Surabaya Buku Novel Laskar Pelangi 99000 5
3 2025-01-12 Jakarta Elektronik Keyboard Mekanik 750000 1
4 2025-01-15 Bandung Elektronik Powerbank 10000mAh 250000 3
tanggal kota kategori produk harga jumlah
21 2025-03-10 Jakarta Fashion Kaos Polos 95000 7
22 2025-03-13 Bandung Buku Buku Masak 120000 3
23 2025-03-16 Surabaya Elektronik Powerbank 10000mAh 250000 4Metode head() menampilkan lima baris pertama dan tail(3) tiga baris terakhir — kebiasaan pertama setelah membaca file apa pun, untuk memastikan kolom terbaca seperti yang diharapkan.
Inspeksi Cepat dengan info() dan describe() #
Dua metode berikutnya menjawab pertanyaan struktur: ada berapa baris, kolom apa saja, tipe apa, dan berapa nilai kosong:
df = pd.read_csv("penjualan.csv")
df.info()
print()
print(df.describe())Output yang Dihasilkan:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 24 entries, 0 to 23
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 tanggal 24 non-null object
1 kota 24 non-null object
2 kategori 24 non-null object
3 produk 24 non-null object
4 harga 24 non-null int64
5 jumlah 24 non-null int64
dtypes: int64(2), object(4)
memory usage: 1.3+ KB
harga jumlah
count 24.000000 24.000000
mean 242208.333333 3.333333
std 189435.082185 1.833663
min 95000.000000 1.000000
25% 120000.000000 2.000000
50% 150000.000000 3.000000
75% 275000.000000 4.000000
max 750000.000000 8.000000Metode info() mengonfirmasi 24 baris, enam kolom, semua terisi penuh (24 non-null), dengan harga dan jumlah sudah dinferensi sebagai int64 oleh pandas. Metode describe() merangkum kolom numerik: rata-rata harga Rp242.208, harga termurah Rp95.000, termahal Rp750.000, dan jumlah per transaksi rata-rata 3,3 unit. Perbedaan mean-Rp242 ribu dengan median-Rp150 ribu pada kolom harga sudah membisikkan sesuatu: distribusi harga miring ke kanan karena beberapa produk mahal — dugaan yang akan kita buktikan di chapter Analisis Data Eksploratif.
Memilih Kolom, Menghitung, Mengurutkan #
Kolom dipilih dengan kurung siku: satu string menghasilkan Series, list of string menghasilkan DataFrame. Dari sana kita menghitung frekuensi dan keragaman:
print(df[["produk", "harga"]].head(3))
print()
print(df["kota"].value_counts())
print()
print("unique :", df["kota"].unique())
print("nunique:", df["kota"].nunique())Output yang Dihasilkan:
produk harga
0 Mouse Wireless 150000
1 Kaos Polos 95000
2 Novel Laskar Pelangi 99000
kota
Jakarta 8
Bandung 8
Surabaya 8
Name: count, dtype: int64
unique : ['Jakarta' 'Bandung' 'Surabaya']
nunique: 3Metode value_counts() menghitung kemunculan tiap nilai, unique() mendaftar nilai berbeda, dan nunique() menghitung jumlahnya. Untuk menjawab “transaksi termahal mana?”, kita mengurutkan lalu mengintip puncaknya, sambil mencicipi dua pintu pengindeksan berbasis label dan posisi:
print(df.sort_values("harga", ascending=False).head(3))
print()
print("loc :", df.loc[0, "produk"])
print("iloc :", df.iloc[3, 4])Output yang Dihasilkan:
tanggal kota kategori produk harga jumlah
3 2025-01-12 Jakarta Elektronik Keyboard Mekanik 750000 1
14 2025-02-16 Surabaya Elektronik Keyboard Mekanik 750000 1
9 2025-02-01 Jakarta Fashion Sepatu Sneakers 450000 1
loc : Mouse Wireless
iloc : 750000Perbedaan loc dan iloc pada contoh di atas: df.loc[0, "produk"] membaca berdasarkan label baris 0 dan nama kolom, sedangkan df.iloc[3, 4] membaca berdasarkan posisi baris ke-3 kolom ke-4 (harga) — keduanya menyentuh mekanisme yang akan dibedah tuntas di chapter DataFrames dan Series.
Alur Kerja pandas #
Lima belas menit pertama dengan dataset baru hampir selalu berpola sama, dan pola itulah kerangka chapter-chapter berikutnya:
- Import —
pd.read_csv()membawa data mentah ke DataFrame. - Inspeksi —
head(),info(),describe()memetakan isi dan tipe. - Bersihkan — tangani nilai kosong, duplikat, dan tipe yang salah (chapter Data Cleaning dengan Pandas).
- Transformasi — buat kolom baru seperti
total = harga * jumlah(chapter DataFrames dan Series). - Agregasi dan visualisasi — jawab pertanyaan dengan
groupbydan grafik (chapter Analisis Data Eksploratif dan dua chapter visualisasi).
Satu langkah dalam pola tersebut belum kita jalankan: dataset latihan ini sengaja dibuat bersih. Data nyata jarang sebaik itu, dan chapter pembersihan akan memperkenalkan versi kotor dari file yang sama.