Pandas Cheatsheet
Pandas Cheatsheet
Materi dalam ebook cheatsheet ini telah divalidasi, namun bagaimanapun juga, ebook ini
tidak luput dari kesalahan baik definisi, konten secara umum, maupun syntax. Segala
masukkan dari pengguna sangat terbuka. DM kami di instagram @datasans.book
Himbauan
1. Tidak menjadikan ebook ini satu-satunya sumber pegangan, cross check dan validasi
segala informasi dari sumber lain.
2. Tidak membagikan atau mencetaknya untuk diperbanyak, kecuali untuk pribadi.
3. Disarankan untuk merekomendasikan langsung ke instagram @datasans.book jika
temanmu berminat agar ilmu yang bermanfaat bisa tersebar semakin luas.
Daftar Isi
Bab 1. Pendahuluan........................................................................................................ 4
1.1 Sejarah Pandas......................................................................................................4
1.2 Pentingnya Pandas dalam Data Science.................................................................. 4
1.3 Persiapan Lingkungan Kerja.................................................................................. 4
Bab 2. Dasar-dasar Pandas.............................................................................................. 6
2.1 Mengimpor Library Pandas................................................................................... 6
2.2 Struktur Data di Pandas: Series dan DataFrame.......................................................6
2.3 Pembuatan Series dan DataFrame.......................................................................... 8
2.4 Menampilkan Informasi Dasar DataFrame............................................................14
2.5 Mengakses Data dalam Series dan DataFrame....................................................... 22
2.6 Operasi Dasar pada DataFrame............................................................................ 29
2.7 Indexing dan Slicing............................................................................................ 34
2.8 Menggunakan Fungsi Bawaan Pandas...................................................................40
2.9 Menggabungkan DataFrame................................................................................ 45
2.10 Mengurutkan Data............................................................................................. 52
Bab 3. Pembersihan Data dengan Pandas...................................................................... 60
3.1 Mengidentifikasi Data yang Hilang (Missing Data).................................................60
3.2 Mengisi Data yang Hilang.................................................................................... 64
3.3 Menghapus Data yang Hilang............................................................................... 68
3.4 Transformasi Data............................................................................................... 71
3.5 Mengubah Tipe Data........................................................................................... 75
3.6 Mengatasi Data Duplikat...................................................................................... 78
3.7 Normalisasi Data................................................................................................. 81
3.8 Manipulasi String................................................................................................ 84
3.9 Menggunakan Fungsi Apply dan Map di Pandas.................................................... 90
3.10 Konversi antara DataFrame dan Numpy Array..................................................... 95
Bab 4. Visualisasi Data dengan Pandas.........................................................................100
4.1 Plot Dasar dengan Pandas.................................................................................. 100
4.2 Lebih Dalam tentang Grafik Batang dan Histogram..............................................106
4.3 Lebih Dalam tentang Scatter Plot dan Line Plot................................................... 112
4.4 Ebook Data Visualization....................................................................................116
Bab 5. Operasi Lanjutan dengan Pandas...................................................................... 117
5.1 Grouping dan Aggregasi..................................................................................... 117
5.2 Pivot Table........................................................................................................ 120
5.3 Crosstab............................................................................................................ 122
5.4 Merging, Joining, dan Concatenating.................................................................. 124
5.5 Time Series Analysis dengan Pandas................................................................... 128
5.6 Window Functions dengan Pandas......................................................................131
5.7 Querying DataFrame dengan Pandas.................................................................. 134
Bab 6. IO di Pandas: Memuat dan Menyimpan Data...................................................... 139
6.1 Menyimpan Data dari CSV dengan Pandas...........................................................139
6.2 Membaca Data ke CSV dengan Pandas................................................................ 141
6.3 Menyimpan Data dari Excel dengan Pandas.........................................................143
Penutup................................................................................................................. 144
Bab 1. Pendahuluan
1.1 Sejarah Pandas
Sebelum memulai perjalanan kita dengan Pandas, mari kita melangkah kembali sejenak
dan merenungkan asal-usulnya. Pandas, yang dikenal sebagai salah satu library Python
terbaik untuk analisis data, dimulai sebagai proyek oleh Wes McKinney pada tahun 2008.
Wes, seorang ahli statistik, merasa frustrasi dengan alat analisis data yang ada saat itu dan
memutuskan untuk membuat yang baru. Siapa sangka, frustrasi ini berujung pada
kelahiran sebuah library yang kini menjadi tulang punggung analisis data dengan Python.
Pandas, yang merupakan kependekan dari "PANel DAta System", awalnya dirancang untuk
mengatasi data keuangan kuantitatif. Namun, seiring berjalannya waktu, kemampuannya
untuk mengolah berbagai jenis data membuatnya mendapatkan tempat di hati banyak
analis data.
Di era informasi ini, data adalah mata uang baru. Setiap hari, triliunan bit data dihasilkan,
dicatat, dan disimpan. Namun, data mentah jarang memberikan wawasan apa pun. Hanya
ketika data ini diolah, dianalisis, dan dipahami, barulah ia memiliki nilai. Inilah di mana
Pandas berperan.
Pertama-tama, pastikan Python sudah terinstall di komputermu. Jika belum, kunjungi situs
web resmi Python dan ikuti petunjuk instalasinya. Setelah itu, kamu bisa memasang Pandas
dengan menggunakan pip, manajer paket Python:
pip install pandas
Setelah instalasi selesai, kamu sudah siap untuk memulai petualanganmu dengan Pandas!
Sampai di sini, kamu mungkin bertanya-tanya: "Apa yang membuat Pandas begitu spesial?"
Atau mungkin, "Mengapa banyak orang jatuh cinta dengan Pandas?" Jawabannya terletak
pada fungsionalitas dan fleksibilitas yang ditawarkannya.
Namun, kelebihan Pandas tidak hanya sebatas itu. Kemampuannya untuk berintegrasi
dengan berbagai library lain seperti Numpy, Matplotlib, dan Scikit-learn menjadikannya
pilihan utama bagi para profesional data.
Ketika kamu mulai menggunakan Pandas, kamu akan menyadari bahwa Pandas bukan
hanya tentang mengolah data. Ia adalah tentang bagaimana memahami cerita yang
diceritakan oleh data. Di balik setiap dataset, ada kisah, tren, dan wawasan yang menunggu
untuk ditemukan. Dan Pandas adalah kuncinya.
Jadi, apakah kamu siap untuk memulai perjalananmu dengan Pandas? Apakah kamu siap
untuk menggali lebih dalam dan memahami apa yang sebenarnya diceritakan oleh data?
Jika jawabannya ya, maka mari kita lanjutkan petualangan ini. Bab-bab berikutnya akan
membawa kamu lebih dekat ke inti dari Pandas, mengungkap setiap rahasia dan trik yang
perlu kamu ketahui.
Bab 2. Dasar-dasar Pandas
2.1 Mengimpor Library Pandas
Sebelum kita mulai bermain dengan data, hal pertama yang perlu kamu lakukan adalah
mengimpor library Pandas. Seperti menyalakan mesin sebelum mengemudikan mobil, ini
adalah langkah awal dalam perjalanan Pandas kita. Untuk melakukannya, kamu hanya
perlu menulis kode berikut:
import pandas as pd
Mengapa pd? Ini adalah konvensi yang umumnya diterima oleh komunitas Python. Singkat,
padat, dan mudah diingat. Setelah melakukan ini, segala keajaiban Pandas siap untuk kamu
gunakan dengan panggilan singkat pd.
Bayangkan sebuah daftar. Daftar belanjaan, daftar tugas, atau daftar nama teman-temanmu.
Dalam Pandas, daftar semacam itu disebut Series. Sebuah Series adalah array satu dimensi
yang dapat menyimpan data dari berbagai jenis, mulai dari integer, float, hingga string atau
objek lainnya.
Tapi tunggu, apa bedanya dengan list di Python? Kenapa kita perlu Series?
Nah, inilah keajaiban Pandas. Dibandingkan dengan list, Series memiliki sesuatu yang
spesial: sebuah indeks. Indeks ini memungkinkan kamu untuk mengidentifikasi dan
mengakses data dengan cara yang lebih intuitif. Kamu bisa menganggap indeks ini seperti
label yang ditempelkan pada setiap item di daftar belanjaanmu, memudahkanmu
menemukan apa yang kamu cari.
Apa yang kamu lihat? Sebuah daftar angka, bukan? Tapi perhatikan lebih dekat. Ada dua
kolom: kolom pertama adalah indeks, dan kolom kedua adalah data. Kamu bisa
membayangkan Series sebagai kolom tunggal dari sebuah tabel. Indeks di sisi kiri, dan data
di sisi kanan.
Jika kamu bisa membayangkan Series sebagai kolom, maka DataFrame adalah tabel lengkap
dengan baris dan kolom. Ini adalah struktur data 2D di mana kamu dapat menyimpan data
dalam format tabel.
Namun, jangan salah paham. Meskipun tampak seperti tabel, DataFrame jauh lebih kuat.
Dengan Pandas, kamu dapat melakukan operasi pada data dengan kecepatan kilat,
memfilter baris, mengubah kolom, dan melakukan analisis mendalam, semuanya dengan
beberapa baris kode.
df
Output:
Apa yang kamu lihat sekarang adalah tabel dengan baris dan kolom. Kolom Nama, Usia, dan
Kota merupakan Series. Dan ketika kamu menggabungkan beberapa Series, kamu
mendapatkan DataFrame.
Bayangkan Series dan DataFrame sebagai blok bangunan. Mereka adalah dasar dari banyak
operasi yang akan kamu lakukan dengan Pandas. Memahami keduanya sama pentingnya
dengan memahami dasar-dasar bahasa ketika belajar berbicara.
Ketika berhadapan dengan data - apakah itu data penjualan, data cuaca, atau data media
sosial - kamu sering kali perlu memutuskan bagaimana cara terbaik untuk menyimpannya.
Apakah sebuah Series sudah cukup, atau apakah kamu memerlukan DataFrame yang lebih
kompleks? Keputusan ini akan mempengaruhi langkah-langkahmu selanjutnya.
Misalkan kamu memiliki daftar harga saham perusahaan tertentu selama satu bulan.
Sebuah Series mungkin sudah cukup. Tapi bagaimana jika kamu memiliki data saham dari
sepuluh perusahaan berbeda, lengkap dengan tanggal, harga pembukaan, harga
penutupan, volume perdagangan, dan lainnya? Di sinilah DataFrame masuk, memberimu
kekuatan untuk menyimpan, mengakses, dan memanipulasi data dengan cara yang belum
pernah kamu alami sebelumnya.
Series
Series adalah array satu dimensi yang dapat menyimpan data dari berbagai tipe seperti
integer, float, string, dll. Series memiliki label pada tiap itemnya, yang dikenal sebagai
index.
s = pd.Series(data, index=index)
Di mana data bisa berupa list, array, atau dictionary, dan index adalah label untuk tiap item.
ser_from_list
Output:
Seperti yang kamu lihat di atas, kita telah berhasil membuat Series dari list. Label dari
setiap item dalam Series (disebut juga sebagai index) secara default adalah angka yang
dimulai dari 0. Namun, kita bisa menentukan label sendiri jika kita mau.
ser_with_custom_index
Output:
Keren, kan? Dengan menentukan label sendiri, kita bisa membuat Series yang lebih
deskriptif.
Selain dari list, kita juga bisa membuat Series dari dictionary. Ketika membuat Series dari
dictionary, kunci dari dictionary akan menjadi index dari Series.
ser_from_dict
Output:
Bagaimana? Mudah sekali, bukan? Dengan dictionary, kita bisa dengan mudah menentukan
pasangan nilai dan label untuk Series.
Walaupun jarang ditemui, kamu bisa membuat Series yang berisi tipe data yang berbeda.
Contohnya, angka dan teks dalam satu Series. Namun, kamu harus berhati-hati saat
melakukannya karena bisa mempengaruhi operasi lain yang kamu lakukan pada Series
tersebut.
ser_mixed_data
Output:
Seperti yang kamu lihat, meskipun kita memasukkan data dengan tipe yang berbeda
(integer, float, dan string), tipe data dari Series keseluruhannya menjadi object. Ini
menunjukkan bahwa semua elemen dianggap sebagai objek, yang memungkinkan kita
untuk menyimpan data dengan tipe yang berbeda.
Sekarang, mari beralih ke struktur data yang lebih kompleks di Pandas: DataFrame.
DataFrame
DataFrame adalah struktur data dua dimensi yang mirip dengan tabel. Ia memiliki baris dan
kolom, dan setiap kolom bisa memiliki tipe data yang berbeda. DataFrame sangat berguna
untuk menyimpan dan mengelola data dalam format tabel.
Di mana data bisa berupa list dari list, array dari array, atau dictionary, dan column_names
adalah nama kolom untuk DataFrame.
df_from_list_of_list
Output:
Seperti yang kamu lihat, DataFrame memungkinkan kita untuk menyimpan data dalam
format tabel dengan baris dan kolom. Dalam contoh di atas, kita membuat DataFrame dari
list dari list.
Namun, sering kali kita juga ingin membuat DataFrame dari dictionary. Ketika kita
membuat DataFrame dari dictionary, kuncinya akan menjadi nama kolom.
df_from_dict = pd.DataFrame(data_dict_for_df)
df_from_dict
Output:
Taraa! Kamu telah berhasil membuat DataFrame dari dictionary. Dengan menggunakan
dictionary, kita dapat dengan mudah menentukan kolom dan data yang diinginkan.
Salah satu kelebihan DataFrame adalah kemampuannya untuk menyimpan kolom dengan
tipe data yang berbeda. Misalnya, kolom pertama bisa berisi integer, kolom kedua berisi
teks, dan kolom ketiga berisi float.
df_mixed_columns
Output:
Kamu bisa melihat bahwa DataFrame kita memiliki tiga kolom dengan tipe data yang
berbeda: integer untuk 'ID', string untuk 'Nama', dan float untuk 'Rata-rata Nilai'.
Membuat DataFrame dari Series
Kadang, kamu mungkin memiliki beberapa Series yang ingin kamu gabungkan menjadi
satu DataFrame. Kamu bisa melakukan ini dengan mudah di Pandas.
df_from_series
Output:
Dalam contoh di atas, kita membuat tiga Series yang berbeda dan menggabungkannya
menjadi satu DataFrame. Perhatikan penggunaan .T untuk mengubah baris menjadi kolom.
2.4 Menampilkan Informasi Dasar DataFrame
Setelah kamu berhasil membuat DataFrame, langkah selanjutnya yang sering dilakukan
adalah mengeksplorasi dan memahami informasi dasar dari DataFrame tersebut. Dengan
mengetahui informasi dasar, kamu bisa mendapatkan gambaran awal tentang data yang
kamu miliki dan menentukan langkah analisis selanjutnya.
Ketika bekerja dengan DataFrame yang besar, kamu mungkin tidak ingin menampilkan
seluruh data sekaligus. Untuk itu, kamu bisa menggunakan .head() untuk menampilkan
beberapa baris pertama dan .tail() untuk menampilkan beberapa baris terakhir.
Contoh:
Dalam contoh di atas, dengan menggunakan .head(), kita dapat menampilkan 5 baris
pertama dari DataFrame df_sample. Jika kamu ingin menampilkan lebih atau kurang dari 5
baris, kamu bisa memberikan angka spesifik ke dalam fungsi .head(). Misalnya, .head(3)
akan menampilkan 3 baris pertama.
Sekarang, mari kita lihat bagaimana cara menggunakan .tail() untuk menampilkan 5 baris
terakhir dari DataFrame.
# Menampilkan 5 baris terakhir
df_sample.tail()
Output:
Dengan .tail(), kita bisa melihat 5 baris terakhir dari DataFrame. Sama seperti .head(), kamu
juga bisa memberikan angka spesifik ke dalam .tail() untuk menentukan jumlah baris yang
ingin ditampilkan.
Menggunakan .info()
Ketika kamu ingin mengetahui informasi struktural dari DataFrame, seperti jumlah baris,
jumlah kolom, tipe data dari setiap kolom, dan memori yang digunakan, kamu bisa
menggunakan metode .info().
Jika kamu ingin mengetahui statistik deskriptif dari kolom numerik di DataFrame, seperti
mean, median, standar deviasi, nilai minimum, dan maksimum, kamu bisa menggunakan
metode .describe().
Dari hasil .describe(), kita mendapatkan statistik deskriptif berikut untuk setiap kolom:
Dalam analisis data, seringkali kamu akan menemukan data yang hilang atau yang biasa
disebut dengan missing values. Pandas menyediakan metode untuk mendeteksi data yang
hilang: .isna() untuk mengecek data yang hilang dan .notna() untuk mengecek data yang
tidak hilang.
Pertama, mari kita buat DataFrame dengan beberapa data yang hilang.
# Membuat DataFrame dengan beberapa data yang hilang
data_missing = {
'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 2, 3, 4, 5],
'C': [1, 2, 3, 4, np.nan]
}
df_missing = pd.DataFrame(data_missing)
# Menampilkan DataFrame
df_missing
Output:
Kini kita memiliki DataFrame df_missing dengan beberapa data yang hilang. Mari kita
gunakan .isna() untuk mendeteksi data yang hilang dan .notna() untuk mendeteksi data
yang tidak hilang.
# Mendeteksi data yang hilang menggunakan .isna()
is_na = df_missing.isna()
is_na, not_na
Output:
.isna() menghasilkan DataFrame dengan nilai True untuk data yang hilang dan False untuk
data yang tidak hilang.
.notna() menghasilkan DataFrame dengan nilai False untuk data yang hilang dan True
untuk data yang tidak hilang.
Dengan informasi ini, kamu dapat dengan mudah mengidentifikasi dan menghitung jumlah
data yang hilang dalam DataFrame kamu.
Untuk menghitung jumlah data yang hilang dalam DataFrame, kamu dapat menggabungkan
.isna() dengan metode .sum().
missing_count
Output:
Hasil di atas menunjukkan bahwa setiap kolom dalam df_missing memiliki satu data yang
hilang.
Menggunakan .value_counts()
value_counts
Output:
Dari hasil di atas, kamu bisa melihat distribusi frekuensi dari setiap buah dalam
ser_categorical. Terdapat 4 apple, 2 banana, dan 2 orange.
Ketika kamu bekerja dengan data, terkadang kamu mungkin ingin tahu berapa banyak nilai
unik yang ada dalam sebuah kolom, atau apa saja nilai unik tersebut. Pandas menyediakan
dua metode yang berguna untuk ini: .nunique() untuk menghitung jumlah nilai unik dan
.unique() untuk menampilkan nilai unik tersebut.
unique_count, unique_values
Output:
Dari hasil di atas, kita dapat melihat bahwa ada 3 jenis buah yang unik dalam
ser_categorical, yaitu apple, banana, dan orange.
Menggunakan .dtypes
Ketika kamu bekerja dengan DataFrame yang memiliki banyak kolom dengan tipe data yang
berbeda, kamu mungkin ingin mengetahui tipe data dari setiap kolom. Kamu bisa
menggunakan atribut .dtypes untuk mendapatkan tipe data dari setiap kolom.
Output:
Dari hasil di atas, kita dapat melihat tipe data dari setiap kolom dalam df_sample. Kolom 'A'
memiliki tipe data int64, 'B' adalah float64, 'C' adalah object (yang biasanya berarti string
atau campuran tipe data lainnya), dan 'D' adalah datetime64[ns] yang menunjukkan data
tanggal dan waktu.
Kadang kamu mungkin ingin tahu berapa banyak baris dan kolom yang ada dalam
DataFrame. Untuk itu, kamu bisa menggunakan atribut .shape.
df_shape
Output:
Dari hasil di atas, kita dapat melihat bahwa df_sample memiliki 10 baris dan 4 kolom.
Ketika bekerja dengan DataFrame, terkadang kamu ingin tahu apa saja nama kolom dan
indeks yang ada. Untuk itu, kamu bisa menggunakan atribut .columns dan .index.
df_columns, df_index
Output:
Dari hasil di atas, kita dapat melihat bahwa df_sample memiliki kolom dengan nama 'A', 'B',
'C', dan 'D'. Untuk indeks, DataFrame kita menggunakan RangeIndex yang dimulai dari 0
hingga 9 (total 10 baris).
Menggunakan .memory_usage()
Ketika bekerja dengan dataset yang sangat besar, kamu mungkin ingin tahu berapa banyak
memori yang digunakan oleh DataFrame atau kolom tertentu. Kamu bisa menggunakan
metode .memory_usage() untuk mendapatkan informasi ini.
memory_usage
Output:
Dari hasil di atas, kita dapat melihat penggunaan memori untuk setiap komponen dalam
df_sample. Kolom 'A', 'B', 'C', dan 'D' masing-masing menggunakan 80 bytes. Sementara itu,
indeks menggunakan 128 bytes.
Terkadang, terutama saat bekerja dengan DataFrame yang memiliki lebih banyak baris
daripada kolom, kamu mungkin ingin menukar baris dan kolom. Kamu bisa menggunakan
metode .transpose() atau atribut .T yang lebih singkat untuk melakukan ini.
df_transposed
Output:
2.5 Mengakses Data dalam Series dan DataFrame
Setelah kamu memahami dasar-dasar pembuatan dan informasi dari Series dan DataFrame,
langkah selanjutnya adalah bagaimana cara mengakses data yang ada di dalamnya. Dalam
bab ini, kita akan membahas berbagai cara untuk mengakses data, mulai dari pengaksesan
elemen sederhana hingga pengaksesan data yang lebih kompleks.
Mengakses elemen di Series mirip dengan mengakses elemen di dalam list Python. Kamu
bisa menggunakan indeks untuk mengakses elemen tertentu.
element_pos, element_label
Output:
Dalam contoh di atas, kita membuat Series ser_example dengan indeks label 'a' hingga 'e'.
Kamu bisa melihat bahwa:
1. Mengakses elemen dengan indeks posisi (dalam hal ini posisi ke-2, dimulai dari 0)
menghasilkan nilai 30.
2. Mengakses elemen dengan indeks label (dalam hal ini label 'c') juga menghasilkan
nilai 30.
3. Mengakses Kolom dan Baris di DataFrame
4. Mengakses data di DataFrame sedikit lebih kompleks dibandingkan dengan Series
karena memiliki dua dimensi: baris dan kolom.
Kamu bisa mengakses kolom DataFrame dengan cara yang mirip dengan mengakses key di
dictionary Python.
Mengakses kolom 'A' dari df_example menghasilkan Series dengan tipe data int64.
Mengakses kolom 'B' menghasilkan Series dengan tipe data object (yang biasanya
menandakan data string).
Mengakses Baris di DataFrame dengan .loc[] dan .iloc[]
Untuk mengakses baris di DataFrame, kamu dapat menggunakan .loc[] untuk pengaksesan
berdasarkan label dan .iloc[] untuk pengaksesan berdasarkan posisi.
row_by_position, row_by_label
Output:
Menggunakan .iloc[2] menghasilkan baris ke-3 dari df_example (ingat indeks dimulai dari
0).
Menggunakan .loc[2] juga menghasilkan baris yang sama karena, dalam contoh ini, label
indeksnya sesuai dengan posisi indeksnya.
Terkadang, kamu mungkin ingin mengakses subset dari DataFrame, baik berupa baris dan
kolom tertentu. Kamu bisa melakukan ini dengan kombinasi .loc[] dan .iloc[].
# Mengakses subset berdasarkan label baris dan nama kolom dengan .loc[]
subset_label = df_example.loc[1:3, ['A', 'B']]
subset_position, subset_label
Output:
Dari contoh di atas, kita dapat melihat:
Dengan .iloc[1:4, 0:2], kita mengambil baris ke-2 hingga ke-4 dan kolom pertama hingga
kedua dari df_example.
Dengan .loc[1:3, ['A', 'B']], kita mendapatkan hasil yang sama, tetapi menggunakan label
indeks dan nama kolom sebagai referensi.
Salah satu keunggulan Pandas adalah kemampuannya untuk memfilter dan mengakses data
berdasarkan kondisi tertentu. Kamu bisa menggunakan operasi pembanding untuk
membuat mask boolean dan kemudian menggunakannya untuk memfilter data.
filtered_rows
Output:
Kamu juga dapat menggabungkan beberapa kondisi saat memfilter DataFrame. Misalnya,
kamu mungkin ingin menemukan semua baris di mana kolom 'A' lebih besar dari 3 dan
kolom 'C' kurang dari 5.
Dalam contoh di atas, kita berhasil memfilter baris di df_example di mana nilai pada kolom
'A' lebih besar dari 3 dan kolom 'C' kurang dari 5.
Jika kamu tahu posisi atau label baris dan kolom tertentu dan hanya ingin mengakses satu
sel data, kamu dapat menggunakan metode .at[] (berdasarkan label) dan .iat[] (berdasarkan
posisi).
data_at, data_iat
Output:
Dalam contoh di atas, kita mengakses elemen di baris ke-3 (indeks 2) dan kolom kedua ('B').
Baik dengan .at[] maupun .iat[], kita mendapatkan hasil yang sama: 'cherry'.
Metode .xs() memungkinkan kamu untuk mengakses baris tertentu dari DataFrame
multi-indeks. Ini dapat sangat berguna ketika kamu bekerja dengan data yang memiliki
struktur indeks yang kompleks.
Sebelum kita mencoba metode .xs(), mari kita buat DataFrame dengan multi-indeks sebagai
contoh.
# Membuat DataFrame dengan multi-indeks
arrays = [
['A', 'A', 'B', 'B'],
[1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=('letters',
'numbers'))
data_multi = {
'data1': [10, 20, 30, 40],
'data2': [100, 200, 300, 400]
}
df_multi = pd.DataFrame(data_multi, index=multi_index)
Kita memiliki DataFrame df_multi dengan multi-indeks berdasarkan kolom 'letters' dan
'numbers'. Sekarang, mari kita gunakan metode .xs() untuk mengakses data di dalamnya.
Ketika kamu ingin mengambil semua baris dengan level indeks tertentu, misalnya semua
baris dengan letters 'A', kamu dapat menggunakan metode .xs().
# Menggunakan .xs() untuk mengakses baris dengan letters 'A'
rows_with_A = df_multi.xs(key='A', level='letters')
rows_with_A
Output:
Dengan .xs(key='A', level='letters'), kita berhasil memilih semua baris yang memiliki level
indeks letters dengan nilai 'A'.
Metode .query()
Metode .query() memungkinkan kamu untuk mengakses data dengan menggunakan string
ekspresi yang mudah dibaca. Ini bisa menjadi alternatif yang lebih intuitif daripada operasi
pemfilteran tradisional.
Dengan .query('data1 > 15 & data2 < 350'), kita berhasil memfilter baris di mana data1 lebih
dari 15 dan data2 kurang dari 350.
Menggunakan .take()
Metode .take() memungkinkan kamu untuk mengambil baris dari DataFrame atau Series
berdasarkan posisi indeks. Ini mirip dengan penggunaan .iloc[], tetapi dapat memberikan
lebih banyak fleksibilitas dalam beberapa skenario.
Dengan .take([1, 3]), kita berhasil mengambil baris ke-2 dan ke-4 dari df_example.
Metode .xs() sangat berguna ketika bekerja dengan DataFrame yang memiliki multi-indeks.
Metode .query() memungkinkan kamu untuk mengakses data dengan ekspresi string yang
mudah dibaca.
Metode .take() memberikan cara lain untuk mengakses baris berdasarkan posisi indeks.
2.6 Operasi Dasar pada DataFrame
Mengakses data adalah langkah awal, tetapi seringkali kamu perlu melakukan berbagai
operasi pada data tersebut untuk mendapatkan informasi yang kamu butuhkan. Dalam
subbab ini, kita akan membahas operasi dasar yang bisa kamu lakukan pada DataFrame.
Salah satu operasi yang sering dilakukan adalah menambahkan kolom baru ke DataFrame.
Kamu bisa menambahkan kolom baru dengan operasi aritmatika atau dengan menetapkan
nilai langsung.
df_example.head()
Output:
Dalam contoh di atas, kita telah menambahkan dua kolom baru ke df_example:
1. Kolom 'D' merupakan hasil dari penggandaan setiap elemen di kolom 'A' dengan 10.
2. Kolom 'E' diisi dengan string "new_column" untuk setiap baris.
Selain menambahkan, terkadang kamu juga perlu menghapus kolom atau baris tertentu
dari DataFrame. Kamu bisa menggunakan metode .drop() untuk melakukan ini.
df_example_dropped_col.head(), df_example_dropped_row.head()
Output:
DataFrame dan Series mendukung operasi aritmatika dasar. Kamu bisa melakukan operasi
seperti penjumlahan, pengurangan, perkalian, dan lainnya antara kolom, baris, atau
dengan skalar.
df_example.head()
Output:
Dalam contoh di atas:
1. Setiap elemen di kolom 'A' dikalikan dengan 5 dan hasilnya disimpan di kolom baru
'A_times_five'.
2. Setiap elemen di kolom 'C' dibagi dengan 2 dan hasilnya disimpan di kolom baru
'C_divided_by_two'.
Metode .apply() memungkinkan kamu untuk menerapkan fungsi ke setiap elemen (atau
baris/kolom, tergantung pada pengaturan) dalam DataFrame atau Series. Ini sangat berguna
ketika kamu ingin melakukan transformasi data yang lebih kompleks.
df_example[['B', 'B_upper']].head()
Output:
Dalam contoh di atas, kita telah menerapkan fungsi lambda untuk mengubah setiap string
di kolom 'B' menjadi huruf kapital dan menyimpannya di kolom baru 'B_upper'.
Dalam banyak kasus, kamu mungkin ingin mengubah kolom tertentu menjadi indeks atau
mengembalikan indeks ke kolom biasa. Untuk melakukan ini, kamu dapat menggunakan
.set_index() dan .reset_index().
df_set_index.head(), df_reset_index.head()
Output:
Kadang-kadang, kamu perlu mengganti nilai tertentu di DataFrame atau Series. Fungsi
.replace() memungkinkan kamu untuk dengan mudah melakukannya.
df_replaced[['B']].head()
Output:
Dalam contoh di atas, kita telah menggantikan nilai 'apple' di kolom 'B' dengan 'grape'
menggunakan metode .replace().
Metode .rename()
Metode .rename() memungkinkan kamu untuk mengubah nama kolom atau indeks tanpa
perlu membuat salinan DataFrame.
df_renamed.head()
Output:
Dalam contoh di atas, kita telah mengganti nama kolom 'A' menjadi 'X' dan 'B' menjadi 'Y'
dengan metode .rename().
Ketika menganalisis data, seringkali kamu ingin mengetahui berapa banyak nilai unik
dalam kolom atau berapa kali setiap nilai muncul. Untuk itu, kamu bisa menggunakan
.nunique() dan .value_counts().
unique_values, value_counts
Output:
Dari contoh di atas:
1. Dengan .nunique(), kita menemukan bahwa kolom 'B' memiliki 5 nilai unik.
2. Dengan .value_counts(), kita melihat frekuensi masing-masing nilai di kolom 'B'.
Dalam hal ini, setiap buah muncul satu kali.
Sebelum kita masuk ke contoh, penting untuk memahami perbedaan antara indeks eksplisit
dan implisit.
1. Indeks Eksplisit: Ini adalah label yang kamu lihat, misalnya, sebagai hasil dari
df.index.
2. Indeks Implisit: Ini adalah posisi integer dari baris/kolom, dimulai dari 0. Ini mirip
dengan indeks dalam list di Python.
Kita sudah menyentuh .loc[] dan .iloc[] sedikit di subbab sebelumnya, tetapi mari kita
jelajahi lebih dalam.
1. .loc[]: Digunakan untuk indeks berbasis label.
2. .iloc[]: Digunakan untuk indeks berbasis posisi integer.
# Mengambil baris ke-2 hingga ke-5 dan kolom 'A' dan 'B' dengan .iloc[]
subset_iloc = df_slicing.iloc[1:5, 0:2]
# Mengambil baris dengan label indeks 1 hingga 4 dan kolom 'A' dan 'B'
dengan .loc[]
subset_loc = df_slicing.loc[1:4, ['A', 'B']]
subset_iloc, subset_loc
Output:
Seperti yang kita bahas sebelumnya, kamu juga bisa menggunakan boolean indexing untuk
mengakses baris berdasarkan kondisi tertentu.
rows_greater_than_5
Output:
Dalam contoh di atas, kita mengambil semua baris di mana nilai di kolom 'A' lebih besar dari
5.
Menggunakan .isin()
Ketika kamu ingin memfilter data berdasarkan daftar nilai tertentu, metode .isin() bisa
sangat berguna.
rows_selected_values
Output:
Dalam contoh di atas, kita telah memilih baris di mana kolom 'B' memiliki salah satu dari
nilai 'A', 'C', atau 'E'.
Ada kalanya kamu mungkin ingin mengatur ulang indeks DataFrame Anda, baik untuk
mengubah urutannya atau untuk menambahkan/menghapus beberapa indeks. Metode
.reindex() memungkinkan kamu untuk melakukan hal ini.
reindexed_df
Output:
Dalam contoh di atas:
1. Kita telah mengatur ulang indeks DataFrame df_slicing dengan daftar indeks baru
new_index.
2. Karena new_index mencakup indeks 10 dan 11 yang tidak ada di DataFrame asli,
baris baru dengan nilai NaN ditambahkan untuk indeks tersebut.
Selain mengakses kolom dengan notasi kurung siku (df['kolom']), jika nama kolom adalah
string yang valid dan tidak bertabrakan dengan metode atau atribut DataFrame lainnya,
kamu dapat mengaksesnya sebagai atribut.
column_A.head()
Output:
Dalam contoh di atas, kita mengakses kolom 'A' dari df_slicing sebagai atribut. Ini adalah
cara yang cepat dan ringkas untuk mengakses kolom, tetapi perlu diingat bahwa ini
mungkin tidak selalu berfungsi jika nama kolom bertabrakan dengan nama metode atau
atribut DataFrame lainnya.
Untuk akses cepat ke elemen tunggal, kamu bisa menggunakan .at[] (untuk label) dan .iat[]
(untuk posisi integer).
element_at, element_iat
Output:
Jika DataFrame kamu memiliki kolom tanggal, kamu mungkin ingin memilih data
berdasarkan rentang waktu tertentu. Ini bisa dilakukan dengan mudah jika kamu memiliki
DateTimeIndex.
Ketika kamu bekerja dengan DataFrame yang memiliki MultiIndex, metode .xs() bisa sangat
berguna untuk memilih data pada level indeks tertentu.
subset_multi
Output:
subset_where.head()
Output:
Dalam contoh di atas, kita menggunakan metode .where() untuk mengambil data dari
kolom 'data' yang nilainya lebih besar dari 15. Nilai yang tidak memenuhi kondisi tersebut
digantikan dengan NaN.
Statistik Deskriptif
Pandas menyediakan berbagai fungsi untuk mendapatkan statistik deskriptif dari data
kamu. Dengan fungsi-fungsi ini, kamu dapat dengan cepat memahami distribusi dan
tendensi data kamu.
Metode .agg() memungkinkan kamu untuk menjalankan beberapa operasi agregasi secara
bersamaan, yang bisa sangat berguna untuk mendapatkan ringkasan cepat dari data kamu.
aggregated
Output:
Dalam contoh di atas:
1. Kita telah menggunakan .agg() untuk mendapatkan beberapa statistik dari kolom 'A'
dan 'B' sekaligus. Untuk kolom 'A', kita mendapatkan rata-rata, deviasi standar, nilai
minimum, dan maksimum. Untuk kolom 'B', kita mendapatkan jumlah total dan
median.
Menggunakan .apply()
Meskipun Pandas menyediakan banyak fungsi bawaan, terkadang kamu mungkin perlu
menerapkan fungsi khusus ke baris atau kolom. Di sinilah .apply() menjadi sangat berguna.
df_stats[['C', 'length_C']].head()
Output:
Sementara .apply() bekerja pada DataFrame dan Series, metode .map() adalah metode yang
khusus untuk Series dan memungkinkan kamu untuk menggantikan setiap nilai di Series
berdasarkan input mapping.
df_stats[['C', 'short_C']].head()
Output:
Data yang hilang adalah hal yang umum dalam analisis data. Pandas menyediakan metode
untuk dengan mudah mengidentifikasi dan menghitung nilai yang hilang.
df_stats[['short_C', 'short_C_replaced']].head()
Output:
average_A_notna
Output:
df2 = pd.DataFrame({
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']
})
concatenated
Output:
df_right = pd.DataFrame({
'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']
})
merged
Output:
Menggunakan .join()
Metode .join() memungkinkan kamu untuk menggabungkan kolom dari satu atau lebih
DataFrame berdasarkan indeks.
df_right_join = pd.DataFrame({
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']
}, index=['K0', 'K2', 'K3'])
joined
Output:
Sejauh ini, kita telah melihat bagaimana menggabungkan DataFrame secara vertikal dengan
.concat(). Namun, metode ini juga bisa digunakan untuk menggabungkan DataFrame secara
horizontal.
horizontal_concat.head()
Output:
Dalam contoh di atas:
1. Kita telah menggunakan pd.concat([df1, df2], axis=1) untuk menggabungkan df1 dan
df2 secara horizontal. Argumen axis=1 mengindikasikan bahwa penggabungan
harus dilakukan secara horizontal (sepanjang kolom).
merged_suffix.head()
Output:
merged_index
Output:
df_right_multi = pd.DataFrame({
'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['L0', 'L0', 'L1', 'L1'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']
})
merged_multi
Output:
Dalam contoh di atas:
1. Kita telah membuat dua DataFrame sintetis, df_left_multi dan df_right_multi, yang
memiliki kolom 'key1' dan 'key2'.
Pandas menyediakan berbagai jenis penggabungan yang dapat kamu gunakan sesuai
kebutuhan:
1. inner: Menggunakan irisan kunci dari kedua frame, ini adalah operasi gabungan
default.
2. outer: Menggunakan gabungan kunci dari kedua frame.
3. left: Menggunakan hanya kunci dari frame kiri.
4. right: Menggunakan hanya kunci dari frame kanan.
Contoh Jenis Gabungan:
# Menggabungkan dengan jenis gabungan 'outer'
merged_outer = df_left_multi.merge(df_right_multi, on=['key1', 'key2'],
how='outer')
merged_outer
Output:
Jika kamu ingin mengurutkan DataFrame atau Series berdasarkan indeksnya, kamu dapat
menggunakan metode .sort_index().
df_sorted_index
Output:
Jika kamu ingin mengurutkan DataFrame atau Series berdasarkan nilai dari satu atau lebih
kolom, kamu dapat menggunakan metode .sort_values().
df_sorted_values
Output:
Namun, bagaimana jika kamu ingin mengurutkan berdasarkan lebih dari satu kolom?
df_sorted_multi_values
Output:
Secara default, Pandas akan mengurutkan data dalam urutan menaik. Namun, jika kamu
ingin mengurutkan data dalam urutan menurun, kamu dapat menggunakan argumen
ascending=False.
df_sorted_descending
Output:
Jika kamu bekerja dengan DataFrame yang memiliki MultiIndex, kamu mungkin perlu
mengurutkan data berdasarkan salah satu level indeks atau lebih. Pandas memungkinkan
kamu untuk melakukan hal ini dengan mudah.
df_sorted_multiindex
Output:
Dalam contoh di atas:
1. Kita memiliki DataFrame df_multiindex dengan MultiIndex (key1 dan key2).
df_sorted_custom
Output:
Dalam contoh di atas:
1. Kita telah memodifikasi fungsi custom_sort agar mengembalikan panjang string
untuk setiap elemen dalam Series.
df_sorted_multi_order
Output:
Jika kamu bekerja dengan data kategorikal di Pandas, kamu mungkin ingin mengurutkan
data bukan berdasarkan urutan alfanumerik, tetapi berdasarkan urutan kategori. Ini bisa
dilakukan dengan mudah dengan tipe data Categorical di Pandas.
df_sorted_categorical
Output:
Secara default, Pandas akan mengurutkan string dengan mempertimbangkan huruf kapital.
Namun, dalam beberapa kasus, kamu mungkin ingin mengabaikan huruf kapital saat
pengurutan.
df_sorted_case_insensitive
Output:
Di dunia analisis data, "data yang hilang" adalah labirinnya sendiri. Terkadang, dataset yang
kamu punya tidak lengkap. Mungkin ada beberapa sel yang kosong, atau mungkin ada
beberapa baris yang seharusnya ada informasi tetapi malah tidak. Data yang hilang ini bisa
menjadi masalah serius, terutama jika kamu berencana melakukan analisis statistik atau
pelatihan model machine learning.
Jadi, bagaimana caranya mengidentifikasi data yang hilang dengan Pandas? Ayo kita
jelajahi!
Pandas biasanya menggunakan nilai NaN (Not a Number) untuk menandai data yang hilang.
Namun, dalam beberapa kasus, data yang hilang bisa juga ditandai dengan cara lain,
misalnya dengan string kosong, atau angka tertentu seperti -9999. Jadi, langkah pertama
dalam mengidentifikasi data yang hilang adalah memahami bagaimana data yang hilang
ditandai dalam datasetmu.
Pandas menyediakan dua metode, yaitu .isna() dan .isnull(), yang keduanya melakukan hal
yang sama: mengidentifikasi data yang hilang. Metode ini akan mengembalikan DataFrame
lain dengan nilai boolean (True atau False) yang menunjukkan apakah elemen tertentu
hilang atau tidak.
df_missing = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [5, np.nan, np.nan, 8, 9],
'C': [1, 2, 3, 4, 5]
})
Kolom dan baris yang memiliki nilai True menunjukkan posisi data yang hilang dalam
DataFrame aslinya.
Selain menggunakan .isna(), kamu juga bisa menggunakan metode .info() untuk
mendapatkan gambaran umum dari DataFrame, termasuk jumlah data yang hilang di setiap
kolom. Ini adalah cara cepat untuk mengetahui di mana kamu mungkin perlu
membersihkan data.
Contoh:
df_missing.info()
Output:
Dari output di atas, kita bisa melihat bahwa kolom 'A' memiliki 4 data yang bukan null
(artinya ada 1 data yang hilang), dan kolom 'B' memiliki 3 data yang bukan null (artinya ada
2 data yang hilang).
4. Menggunakan .sum() untuk Menghitung Jumlah Data yang Hilang
Terkadang, kamu mungkin juga ingin tahu jumlah total data yang hilang dalam setiap
kolom. Kamu bisa menggunakan metode .sum() setelah .isna() untuk mendapatkan
informasi ini.
Masing-masing angka menunjukkan jumlah data yang hilang dalam kolom terkait.
Tidak semua orang merasa nyaman dengan angka dan tabel. Kadang-kadang, sebuah
gambar bisa menyampaikan pesan lebih cepat daripada seribu angka. Itu sebabnya
visualisasi bisa menjadi alat yang sangat kuat dalam mengidentifikasi data yang hilang.
Salah satu cara paling efektif untuk melihat sejauh mana data yang hilang dari datasetmu
adalah dengan menggunakan pustaka visualisasi seperti Matplotlib atau Seaborn. Kamu
bisa membuat 'heatmap' dari DataFrame yang dihasilkan oleh isna() untuk melihat di mana
sel yang hilang berada.
Contoh:
# Contoh kode
import seaborn as sns
sns.heatmap(df_missing.isna(), cbar=False)
Output:
Dalam heatmap ini, sel yang berwarna menunjukkan data yang hilang. Ini memberikan
gambaran cepat tentang sejauh mana data yang hilang dan di kolom mana mereka banyak
ditemukan.
Tidak hanya DataFrame, kamu juga dapat menggunakan metode yang sama untuk
mengidentifikasi data yang hilang dalam objek Series. Misalnya, jika kamu memiliki sebuah
Series, kamu bisa menggunakan isna() atau isnull() untuk melihat apakah ada data yang
hilang.
# Contoh kode
series_missing = pd.Series([1, np.nan, 3, 4, np.nan])
series_missing.isna()
Output:
Data yang hilang tidak hanya terjadi pada data numerik, tetapi juga pada data kategorikal
atau string. Dalam kasus seperti ini, data yang hilang bisa ditandai dengan string kosong
atau label tertentu seperti "Tidak Diketahui", "N/A", atau bahkan "?".
Dalam contoh ini, kita akan menggantikan string kosong '', 'N/A', dan '?' dengan np.nan
dalam dataframe df_categorical. Kemudian, kita akan menggunakan metode isna() untuk
mengidentifikasi data yang hilang.
Contoh:
# Menggantikan string kosong, 'N/A', dan '?' dengan np.nan
df_categorical.replace(['', 'N/A', '?'], np.nan, inplace=True)
Dari output, kita dapat melihat bahwa dalam kolom A baris kedua dan keempat memiliki
data yang hilang (ditandai dengan True), sedangkan dalam kolom B, baris kedua dan ketiga
memiliki data yang hilang.
Anggap saja ada lubang di jalan yang biasa kamu lalui. Salah satu cara paling cepat untuk
mengatasinya adalah dengan menutupinya menggunakan material apa pun yang tersedia.
Di Pandas, metode .fillna() adalah alatmu untuk melakukan ini.
Mari kita lihat contoh dengan data sintetis yang memiliki beberapa nilai NaN.
# Contoh data sintetis
data = {
'A': [1, np.nan, 3, 4, 5],
'B': [5, 4, np.nan, 2, 1]
}
df = pd.DataFrame(data)
df
Output:
Kamu bisa mengisi semua data yang hilang (NaN) di kolom 'A' dengan angka 0.
# Mengisi data yang hilang di kolom 'A' dengan 0
df['A'].fillna(0)
Output:
Namun, apa yang terjadi jika lubang di jalan itu besar dan kamu membutuhkan solusi yang
lebih rapi? Di sinilah metode interpolasi berguna. Metode ini akan mencoba
"menebak-nebak" nilai yang paling masuk akal berdasarkan data di sekitarnya.
Di Pandas, kamu bisa melakukan ini dengan argumen method dalam .fillna().
# Mengisi data yang hilang dengan interpolasi linier
df['B'].fillna(method='ffill')
Output:
Pada contoh di atas, metode 'ffill' (forward fill) akan mengisi data yang hilang dengan nilai
sebelumnya di kolom tersebut.
Bagaimana jika kamu berada di sebuah labirin dan tahu bahwa rata-rata jarak antara setiap
belokan adalah 10 langkah? Kamu bisa menggunakan informasi ini untuk memperkirakan
di mana belokan selanjutnya!
Di Pandas, kamu bisa menggunakan metode seperti .mean(), .median(), atau .mode() untuk
mengisi data yang hilang dengan nilai agregat dari kolom tersebut.
# Mengisi data yang hilang dengan rata-rata kolom 'A'
df['A'].fillna(df['A'].mean())
Output:
Dalam contoh ini, semua nilai NaN di kolom 'A' akan diganti dengan rata-rata dari kolom 'A'.
# Contoh
df['A'].fillna(0, inplace=True)
df
Output:
Dengan inplace=True, dataframe asli akan langsung berganti nilainya sesuai dengan
imputasi yang kita lakukan. Bisa dilihat kolom A sudah berisi nilai-nilai dengan imputasi
missing value sesuai yang kita lakukan, sedangkan kolom B, walaupun sedari tadi kita
lakukan percobaan imputasi nilai yang hilang, namun nilai aslinya tidak berubah, tanpa
inplace=True, kita harus secara manual meng-assign-nya seperti ini:
df['B'] = df['B'].fillna(method='ffill')
df
Output:
Berikut adalah beberapa kondisi kapan kita harus menggunakan metode tertentu dalam
mengatasi nilai yang hilang.
Menggantikan nilai
Data bersifat kontinu yang hilang dengan
Mean Imputation df.fillna(df.mean()) dan distribusi normal rata-rata kolom.
Data bersifat kontinu Menggantikan nilai
dan distribusi tidak yang hilang dengan
Median Imputation df.fillna(df.median()) normal median kolom.
Menggantikan nilai
Data bersifat yang hilang dengan
Modus Imputation df.fillna(df.mode().iloc[0]) kategorikal modus kolom.
Jumlah data yang Menghapus baris
hilang kecil relatif yang memiliki nilai
Hapus Row df.dropna() terhadap dataset yang hilang.
Anda memiliki nilai
konstan untuk Menggantikan nilai
menggantikan nilai yang hilang dengan
Imputasi Konstan df.fillna(value) hilang nilai konstan.
Mengisi nilai yang
Data bersifat time hilang berdasarkan
Imputasi Interpolasi df.interpolate() series atau urutan interpolasi linier.
3.3 Menghapus Data yang Hilang
Tidak semua missing values bisa atau harus diisi, terutama jika kamu tidak yakin mengenai
apa yang sebenarnya sedang kamu hadapi. Kadang, solusinya adalah menghapus bagian
yang tidak kamu butuhkan atau yang bisa mempengaruhi analisis kamu. Apakah kamu siap
untuk membuang kotoran itu? Mari kita coba!
Metode paling langsung untuk menghapus data yang hilang adalah dengan menggunakan
.dropna(). Dengan metode ini, setiap baris yang memiliki setidaknya satu nilai NaN akan
dihapus.
# Menghapus semua baris yang memiliki nilai NaN dan menampilkan hasilnya
df_dropped = df.dropna()
df_dropped
Output:
Hasilnya adalah DataFrame baru yang sudah dibersihkan dari baris dengan nilai NaN. Baris
dengan indeks 1 dan 2 telah dihapus karena mereka memiliki setidaknya satu NaN.
Terkadang, kamu mungkin hanya peduli pada nilai yang hilang di kolom tertentu. Misalnya,
kolom 'A' adalah kolom target yang sangat penting untuk model machine learning kamu.
Dalam kasus ini, kamu bisa menentukan kolom target saat menggunakan .dropna().
Hasilnya adalah DataFrame yang hanya menghapus baris dengan nilai NaN pada kolom 'A'.
Baris dengan indeks 1 telah dihapus, tetapi baris dengan indeks 2 tetap ada meskipun
memiliki NaN di kolom 'B'.
Tidak hanya baris, kamu juga bisa menghapus kolom yang memiliki nilai NaN. Untuk
melakukan ini, kamu bisa menggunakan argumen axis=1.
Terkadang, kamu mungkin tidak ingin menghapus baris atau kolom yang memiliki
setidaknya satu NaN. Mungkin kamu ingin lebih fleksibel, misalnya, hanya menghapus
baris yang memiliki lebih dari satu NaN.
Hasilnya adalah DataFrame yang hanya menghapus baris jika baris tersebut memiliki lebih
dari satu NaN. Dalam kasus ini, semua baris memenuhi syarat tersebut, jadi tidak ada yang
dihapus.
Melakukan pembersihan data yang tepat adalah seni yang memerlukan praktik dan intuisi.
Menghapus data yang hilang adalah salah satu keputusan paling penting yang bisa
mempengaruhi kualitas analisis kamu. Jadi, pertimbangkan dengan cermat apakah kamu
benar-benar perlu menghapus data tersebut atau apakah ada cara lain untuk
mempertahankan informasi penting.
3.4 Transformasi Data
Mengidentifikasi, mengisi, atau bahkan menghapus data yang hilang hanyalah sebagian
kecil dari perjalanan pembersihan data. Sekarang, saatnya kita beralih ke sesuatu yang
lebih kompleks tetapi juga lebih menarik: Transformasi Data.
Transformasi data adalah seperti seni origami dalam dunia data science. Kamu mengambil
sesuatu yang kasar dan tidak terbentuk, lalu melipat dan memotongnya hingga menjadi
sesuatu yang indah dan fungsional. Tertarik? Ayo mulai!
Pertama-tama, mari kita mulai dengan sesuatu yang sederhana. Kamu bisa melakukan
operasi matematika pada kolom DataFrame dengan mudah. Misalnya, kamu bisa
menggandakan setiap elemen di kolom 'A' dengan 2.
# Menggandakan setiap elemen di kolom 'A' dengan 2
df['A'] * 2
Output:
Jika kamu ingin melakukan sesuatu yang lebih dari sekadar operasi matematika sederhana,
.apply() adalah temanmu. Fungsi ini memungkinkan kamu untuk menerapkan fungsi apa
pun ke setiap elemen dalam kolom atau baris.
# Mengkuadratkan setiap elemen di kolom 'A'
df['A'].apply(lambda x: x**2)
Output:
3. .map() dan .replace() untuk Mengganti Nilai
Kamu juga bisa menggunakan .map() atau .replace() untuk mengganti nilai dalam kolom.
Misalnya, mengganti nama perusahaan dengan kode sahamnya.
# Menggunakan map
df['Company'].map({'Apple': 'AAPL', 'Microsoft': 'MSFT'})
# Menggunakan replace
df['Company'].replace({'Apple': 'AAPL', 'Microsoft': 'MSFT'})
Output:
Pandas juga memiliki sejumlah fungsi statistik bawaan yang bisa kamu gunakan untuk
transformasi data, seperti .mean(), .min(), .max(), .sum(), dan lain-lain.
# Menghitung rata-rata kolom 'A' dan menggunakannya untuk transformasi
mean_A = df['A'].mean()
df['A'] - mean_A
Output:
Mengkategorikan data numerik ke dalam 'bin' atau kelompok adalah salah satu cara
transformasi data yang umum. Fungsi .cut() di Pandas membuat ini menjadi mudah.
# Membagi data di kolom 'A' menjadi 3 bin
bins = [0, 2, 4, 6]
labels = ['Low', 'Medium', 'High']
df['A_binned'] = pd.cut(df['A'], bins=bins, labels=labels)
Output:
6. Normalisasi Data dengan .min() dan .max()
Normalisasi adalah teknik untuk mengubah rentang data numerik sehingga semuanya ada
dalam skala yang sama, biasanya antara 0 dan 1. Ini adalah langkah yang sering diperlukan
jika kamu bekerja dengan algoritma machine learning yang sensitif terhadap skala.
Seperti yang kamu lihat, kolom 'A' telah dinormalisasi sehingga nilainya sekarang berada di
antara 0 dan 1.
7. Log Transformasi
Transformasi logaritmik adalah teknik yang umum digunakan untuk meredam efek outlier
atau mendekatkan distribusi data ke distribusi normal. Di Pandas, kamu bisa melakukan ini
dengan np.log().
Mari kita coba.
import numpy as np
Voila! Kolom 'A_log' menunjukkan hasil dari transformasi logaritmik kolom 'A'. Teknik ini
sangat berguna untuk memanipulasi skala dan distribusi data.
Jika kamu memiliki kolom dengan variabel kategorikal, kamu mungkin ingin mengubahnya
menjadi bentuk yang lebih "mesin-baca". One-hot encoding adalah salah satu cara untuk
melakukan ini.
# One-hot encoding the 'Company' column
pd.get_dummies(df, columns=['Company'])
Output:
Tadaa! Kolom 'Company' telah dikonversi menjadi dua kolom baru: 'Company_Apple' dan
'Company_Microsoft', yang menunjukkan keanggotaan kategorikal melalui one-hot
encoding.
9. Menggunakan .astype() untuk Mengubah Tipe Data
Terkadang, kamu mungkin perlu mengubah tipe data kolom. Pandas membuat ini menjadi
mudah dengan .astype().
# Mengubah tipe data kolom 'A' menjadi float
df['A'].astype(float)
Output:
Berhasil! Tipe data kolom 'A' sekarang telah berubah menjadi float64.
Bagaimana jika kamu ingin melakukan transformasi hanya pada sebagian data yang
memenuhi kondisi tertentu? .query() adalah solusinya.
# Menyeleksi baris dimana kolom 'A' lebih dari 2 dan menggandakan
nilainya
df.query('A > 2')['A'] * 2
Output:
Transformasi data adalah sebuah proses yang penuh dengan kekayaan dan kompleksitas.
Setiap teknik mempunyai kegunaan dan implikasinya sendiri.
Mengubah tipe data bukan hanya soal kebutuhan analisis. Dengan mengatur tipe data
dengan benar, kamu bisa mengoptimalkan penyimpanan memori dan mempercepat
operasi komputasi. Jadi, siap untuk menyelam lebih dalam?
Menggunakan astype():
Fungsi ini memungkinkan kamu untuk mengubah tipe data kolom DataFrame.
Contoh:
import pandas as pd
print(df.dtypes)
Output:
Menggunakan pd.to_datetime():
Fungsi ini spesifik untuk mengubah kolom menjadi tipe data datetime.
Contoh:
# Mengubah tipe data kolom tanggal menjadi datetime
df['tanggal'] = pd.to_datetime(df['tanggal'])
print(df.dtypes)
Output:
Menggunakan pd.to_numeric():
Jika kamu memiliki data yang mungkin mengandung non-numeric values dan ingin
mengubahnya menjadi numerik (menggantikan non-numeric dengan NaN), gunakan fungsi
ini.
# Membuat data sintetis dengan non-numeric values
df['harga'] = ['1000', 'dua ribu', '3000']
print(df)
Output:
Menggunakan infer_objects():
Jika kamu ingin Pandas menebak tipe data terbaik untuk kolommu, gunakan metode ini.
Contoh:
df = df.infer_objects()
print(df.dtypes)
Output:
Tapi jangan khawatir! Di sini kita akan membahas beberapa teknik untuk mengidentifikasi
dan menghapus data duplikat menggunakan library Pandas.
Dan voilà! Baris yang terduplikasi sudah dihapus dari DataFrame kita. Sekarang, kita
memiliki DataFrame yang lebih "bersih."
Kadang, kamu mungkin hanya ingin menghapus baris yang memiliki nilai yang sama pada
kolom tertentu, bukan di seluruh kolom.
# Creating synthetic data with duplicate 'Name' but different 'Age' and
'Occupation'
data_name_dup = {
'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'David'],
'Age': [25, 30, 35, 40, 45, 40],
'Occupation': ['Engineer', 'Doctor', 'Artist', 'Writer', 'Dancer',
'Writer']
}
df_name_dup = pd.DataFrame(data_name_dup)
df_name_dup
Output:
Dalam hal ini, kamu bisa memberikan nama kolom sebagai argumen ke .drop_duplicates().
# Dropping rows that have the same 'Name'
df_name_dup.drop_duplicates(subset=['Name'], inplace=True)
Seperti yang kamu lihat, meskipun baris dengan indeks 3 dan 4 memiliki 'Age' dan
'Occupation' yang berbeda dari baris pertama yang memiliki nama yang sama (indeks 0 dan
1), mereka tetap dihapus karena kita mengatur untuk menghapus duplikat berdasarkan
kolom 'Name' saja.
Secara default, .drop_duplicates() akan mempertahankan baris pertama dari setiap set baris
yang terduplikasi. Namun, kamu juga bisa memilih untuk mempertahankan baris terakhir
dari setiap set dengan menggunakan argumen keep='last'.
df.drop_duplicates(keep='last', inplace=True)
3.7 Normalisasi Data
Kita semua tahu betapa pentingnya data yang "bersih" untuk analisis atau pelatihan model
machine learning. Tapi apa yang dimaksud dengan "bersih"? Ya, selain dari tidak adanya
data yang hilang atau duplikat, "bersih" juga berarti data tersebut berada dalam skala atau
rentang yang serupa. Inilah yang disebut "normalisasi data."
Normalisasi adalah proses mengubah nilai dalam dataset untuk membuatnya berada dalam
skala yang serupa. Ini sangat penting dalam teknik machine learning seperti k-NN, PCA,
atau metode gradien turun, di mana perbedaan skala antar variabel bisa menjadi masalah.
Teknik Normalisasi
Ada beberapa teknik untuk melakukan normalisasi, di antaranya:
Min-Max Scaling: Mengubah skala fitur ke rentang [0, 1] atau [a, b].
Z-Score Normalization (Standardization): Mengubah skala fitur sehingga memiliki mean (µ)
0 dan standard deviation (σ) 1.
# Min-Max Scaling
def minmax_scaling(series):
return (series - series.min()) / (series.max() - series.min())
Taraaa! Data kita sekarang telah dinormalisasi ke rentang [0, 1] menggunakan Min-Max
Scaling. Jika kamu perhatikan, nilai minimum untuk setiap kolom sekarang adalah 0, dan
nilai maksimum adalah 1.
Sekarang, mari kita coba Z-Score Normalization. Ini adalah salah satu teknik normalisasi
yang paling umum digunakan, terutama jika kita tidak tahu distribusi data atau jika
distribusi tidak mengikuti asumsi normalitas.
# Z-Score Normalization (Standardization)
def zscore_scaling(series):
return (series - series.mean()) / series.std()
Keren, kan? Sekarang setiap kolom memiliki mean yang mendekati 0 dan deviasi standar
yang mendekati 1, sesuai dengan yang diharapkan dari Z-Score Normalization. Ini bisa
sangat berguna, terutama ketika kamu menerapkan teknik yang bergantung pada jarak
antar poin, seperti k-NN atau PCA.
Log Transformation
Terkadang, data yang kita miliki sangat condong ke satu sisi atau memiliki banyak outlier.
Dalam kasus-kasus seperti itu, kita bisa menggunakan Log Transformation untuk
menormalkan data. Transformasi ini sangat membantu dalam menjadikan data lebih
"normal" dan mempermudah identifikasi pola.
Data kita sekarang telah ditransformasi menggunakan Log Transformation. Seperti yang
bisa kamu lihat, rentang data sekarang menjadi lebih kecil dibandingkan dengan data asli.
Normalisasi data adalah salah satu langkah paling krusial dalam pra-pemrosesan data. Baik
itu Min-Max Scaling, Z-Score Normalization, atau Log Transformation, setiap metode
memiliki keunggulan dan kelemahannya sendiri. Pilihlah yang paling sesuai dengan jenis
data dan masalah yang ingin kamu selesaikan.
Sebelum masuk ke detail, kamu perlu tahu dulu bahwa Pandas memiliki akses langsung ke
berbagai metode string melalui atribut .str dari Series atau DataFrame. Artinya, setiap teks
di dalam Series atau kolom DataFrame bisa langsung dimanipulasi dengan mudah.
data = {
'Nama': ['ALICE', 'Bob', 'Charlie ', ' DAvid', 'eve'],
'Alamat': ['JL. Anggrek 12', 'Jl. Mawar No. 5', 'Jl. Melati, No.
10', 'Jl. Tulip 3A', 'Jl. Sakura 2B']
}
df = pd.DataFrame(data)
df
Output:
Bagaimana kalau kita ingin mengubah semua nama menjadi huruf kecil?
df['Nama'] = df['Nama'].str.lower()
df
Output:
Spasi ekstra bisa menjadi masalah saat kita membandingkan dua string atau saat kita ingin
mengatur format data. Untungnya, dengan Pandas, kita bisa mudah menghilangkannya.
df['Nama'] = df['Nama'].str.strip()
df
Output:
3. Memecah String
Kadang, kita perlu memecah string menjadi beberapa bagian. Misalnya dari alamat, kita
ingin memisahkan nama jalan dan nomor rumah.
df[['Jalan', 'No']] = df['Alamat'].str.split(',', expand=True)
df
Output:
4. Menggabungkan String
Berlawanan dengan memecah, kita juga sering perlu menggabungkan beberapa string.
df['Info Lengkap'] = df['Nama'] + ' tinggal di ' + df['Alamat']
df
Output:
5. Mengganti Substring
Mungkin kamu menemukan kesalahan dalam data atau ingin mengubah format tertentu.
Misalnya, mengganti "JL." menjadi "Jalan".
df['Alamat'] = df['Alamat'].str.replace('JL.', 'Jalan')
df
Output:
6. Mengecek Ketersediaan Substring
Kadang kita ingin tahu apakah suatu kata atau frase ada dalam string. Misalnya, siapa saja
yang tinggal di Jalan Anggrek?
df[df['Alamat'].str.contains('Anggrek')]
Output:
Ekspresi reguler (regex) adalah alat yang sangat kuat untuk pencocokan pola dalam teks.
Dengan Pandas, kita bisa menggunakan regex untuk ekstraksi data.
Terkadang, data tanggal yang kamu miliki berada dalam format teks yang berbeda-beda.
Misalnya, "12-01-2023", "12 Jan 2023", atau "Jan 12, 2023". Dengan Pandas, kamu bisa dengan
mudah mengonversinya menjadi format yang kamu inginkan.
tanggal_data = ['12-01-2023', '15 Jan 2023', 'Jan 20, 2023']
df_tanggal = pd.DataFrame({'Tanggal': tanggal_data})
print('Data original:')
display(df_tanggal)
df_tanggal['Tanggal'] = pd.to_datetime(df_tanggal['Tanggal'])
print('\nSetelah Konversi:')
display(df_tanggal)
Output:
Misalkan kamu hanya ingin menampilkan 5 karakter pertama dari setiap nama. Ini bisa
berguna untuk inisialisasi atau keperluan lainnya.
df['Inisial'] = df['Nama'].str[:5]
df
Output:
12. Mengubah String Menjadi Uppercase atau Capitalize
Ketika ingin menstandardisasi data, mengubah teks menjadi uppercase atau capitalize bisa
jadi pilihan.
df['Nama_Upper'] = df['Nama'].str.upper()
df['Nama_Capitalize'] = df['Nama'].str.capitalize()
df[['Nama','Nama_Upper','Nama_Capitalize']]
Output:
Mencari tahu posisi dari suatu kata atau frase dalam string bisa membantu dalam berbagai
kasus. Misalnya, untuk ekstraksi atau analisis lebih lanjut.
posisi = df['Alamat'].str.find('Anggrek')
posisi
Output:
Dengan Pandas, manipulasi string bukan hanya tentang memperbaiki kesalahan atau
kekurangan data, tetapi juga tentang mengubah cara kita melihat dan memahami data
tersebut. Setiap fungsi dan metode yang telah kita pelajari memungkinkan kita untuk
mendekati data dengan cara yang lebih kreatif dan efisien.
Fungsi apply adalah salah satu metode yang paling fleksibel dan berguna di Pandas. Dengan
apply, kamu dapat menerapkan fungsi tertentu ke setiap baris atau kolom dari DataFrame.
Contoh Sederhana:
Misalkan kita memiliki DataFrame sederhana dan kita ingin menghitung panjang dari
setiap string di kolom tertentu.
Seperti yang kamu lihat, kita telah berhasil menerapkan fungsi len ke setiap entri di kolom
'Nama' untuk menghitung panjangnya. Hasilnya kemudian disimpan dalam kolom baru
bernama 'Panjang_Nama'.
Fungsi map adalah metode yang digunakan untuk memetakan sebuah nilai ke nilai lain.
Biasanya digunakan untuk mengganti nilai tertentu dalam Series. Fungsi ini sangat berguna
saat kita ingin mengganti nilai tertentu dalam kolom berdasarkan kamus (dictionary) atau
fungsi tertentu.
Contoh Sederhana:
Misalkan kita ingin mengganti angka usia dalam DataFrame kita dengan kategori usia
('Muda' untuk usia < 30, 'Tua' untuk usia >= 30). Kita dapat menggunakan map untuk tujuan
ini.
Meskipun apply dan map tampak serupa, ada perbedaan penting antara keduanya:
Sifat Penerapan:
● apply dapat bekerja pada baris atau kolom DataFrame, sedangkan map hanya
bekerja pada elemen Series.
Keluaran:
● apply bisa menghasilkan Series atau DataFrame, tergantung pada fungsi yang
diterapkan. map, di sisi lain, selalu menghasilkan Series.
Fleksibilitas:
● apply lebih fleksibel dan bisa menerima fungsi lambda, fungsi biasa, atau bahkan
agregasi lain seperti sum atau mean.
● map hanya bisa menerima kamus atau fungsi sederhana.
Mari kita lihat beberapa contoh lanjutan untuk mendapatkan pemahaman yang lebih baik.
Menggunakan Apply dengan Fungsi Lambda
Katakanlah kita ingin menghitung setengah dari usia seseorang. Kita bisa menggunakan
fungsi lambda dengan apply untuk tujuan ini.
# Menggunakan apply dengan fungsi lambda
df['Setengah_Usia'] = df['Usia'].apply(lambda x: x/2)
df
Output:
Hasilnya, kolom 'Setengah_Usia' sekarang menampilkan setengah dari usia setiap individu.
Misalkan kita memiliki kamus yang memetakan nama ke hobi favorit mereka. Kita bisa
menggunakan map untuk menambahkan hobi ini ke DataFrame kita.
# Kamus hobi berdasarkan nama
hobi_kamus = {
'Alice': 'Membaca',
'Bob': 'Bersepeda',
'Charlie': 'Memasak',
'David': 'Menulis'
}
Salah satu kelebihan dari apply adalah kemampuannya untuk bekerja dengan beberapa
kolom sekaligus. Misalnya, kita ingin membuat kolom baru yang menggabungkan informasi
dari kolom 'Nama' dan 'Usia'.
# Menggunakan apply pada beberapa kolom
df['Info'] = df.apply(lambda row: f"{row['Nama']} berusia {row['Usia']}
tahun", axis=1)
df
Output:
Seperti yang kamu lihat, dengan menggunakan apply pada axis=1 (yang menunjukkan
operasi sepanjang baris), kita dapat menggabungkan informasi dari beberapa kolom untuk
membuat kolom 'Info'.
Selain menerapkan fungsi langsung, seringkali kita ingin menerapkan operasi berdasarkan
kondisi tertentu. Untuk itu, kita bisa menggabungkan apply atau map dengan fungsi
bersyarat.
Misalkan kita ingin menentukan apakah seseorang adalah seorang "penulis" berdasarkan
hobi mereka. Kita bisa menggunakan apply dengan kondisi untuk tujuan ini.
# Menggunakan apply dengan kondisi
df['Adalah_Penulis'] = df['Hobi'].apply(lambda x: True if x == 'Menulis'
else False)
df
Output:
Kolom 'Adalah_Penulis' sekarang menunjukkan apakah seseorang memiliki hobi menulis
atau tidak.
Kadang-kadang, kita mungkin ingin memetakan nilai berdasarkan kamus tetapi juga
memiliki "default" jika nilai tersebut tidak ditemukan dalam kamus. Kita dapat
menggunakan kombinasi map dan fungsi fillna untuk ini.
Misalkan kita ingin menambahkan kolom yang menunjukkan warna favorit seseorang
berdasarkan nama mereka. Tetapi kita hanya tahu warna favorit beberapa orang. Untuk
yang lain, kita ingin menetapkan default "Biru". Mari kita coba.
# Kamus warna berdasarkan nama
warna_kamus = {
'Alice': 'Merah',
'Charlie': 'Hijau',
}
# Menggunakan map dengan kamus dan mengisi nilai yang hilang dengan
"Biru"
df['Warna_Favorit'] = df['Nama'].map(warna_kamus).fillna('Biru')
df
Output:
Hasilnya, kolom 'Warna_Favorit' sekarang menunjukkan warna favorit setiap individu. Jika
nama mereka tidak ditemukan dalam kamus, maka secara default mereka diberi warna
"Biru".
Ada situasi di mana kamu mungkin ingin menggunakan apply dan map secara bersamaan.
Misalnya, kamu ingin mengaplikasikan fungsi pada satu kolom tetapi hasilnya bergantung
pada nilai kolom lain.
Misalkan kita ingin menentukan apakah seseorang lebih suka aktivitas di dalam atau di luar
ruangan berdasarkan hobi mereka. Bersepeda adalah aktivitas luar ruangan, sementara
membaca dan menulis adalah aktivitas di dalam ruangan. Mari kita coba.
# Fungsi untuk menentukan preferensi aktivitas berdasarkan hobi
def aktivitas_preferensi(row):
outdoor_hobbies = ['Bersepeda']
if row['Hobi'] in outdoor_hobbies:
return 'Luar Ruangan'
else:
return 'Dalam Ruangan'
Dengan memahami dan menguasai apply dan map, kamu dapat dengan cepat dan efisien
mengubah dan memanipulasi data di Pandas. Keduanya memberikan fleksibilitas yang
besar dan memungkinkan untuk transformasi data yang kompleks tanpa harus menulis
banyak kode.
Semakin sering kamu berlatih dengan contoh nyata, semakin mahir kamu dalam
menerapkan teknik-teknik ini dalam situasi sehari-hari. Selalu ingat untuk bereksperimen
dan mencari cara baru untuk memanfaatkan kekuatan kedua fungsi ini!
Sebelum kita masuk ke bagian teknis, pertanyaan pertama yang mungkin muncul adalah,
"Mengapa kita perlu mengonversi antara kedua jenis struktur data ini?"
Alasannya sederhana:
1. Beberapa algoritma atau library, khususnya yang berfokus pada komputasi numerik
atau pembelajaran mesin, seperti Scikit-learn, mungkin memerlukan input dalam
bentuk Numpy Array.
2. Pandas DataFrame menyediakan lebih banyak fungsionalitas untuk manipulasi data,
seperti menghandle data yang hilang, memberi label pada data, dan lainnya. Jadi,
terkadang lebih mudah untuk memulai dengan DataFrame, melakukan beberapa
prapemrosesan, lalu mengonversinya ke Numpy Array untuk analisis lebih lanjut
atau pemodelan.
Dengan pemahaman dasar ini, mari kita lanjutkan ke bagian teknis.
Untuk mengonversi DataFrame ke Numpy Array, kamu bisa menggunakan metode .values
atau metode .to_numpy() dari DataFrame.
Contoh Sederhana:
np_array_values, np_array_to_numpy
Output:
Seperti yang kamu lihat, kedua metode tersebut menghasilkan Numpy Array yang sama,
yang merupakan representasi dari DataFrame asli kita.
Konversi Numpy Array ke DataFrame
Sekarang, bagaimana jika kita memiliki Numpy Array dan ingin mengubahnya menjadi
DataFrame? Untuk tujuan ini, kita bisa menggunakan konstruktor pd.DataFrame().
Contoh Sederhana:
Dari Numpy Array yang telah kita buat sebelumnya, mari kita konversi kembali ke
DataFrame.
# Mengonversi Numpy Array ke DataFrame
df_from_np = pd.DataFrame(np_array_values, columns=['A', 'B', 'C'])
df_from_np
Output:
Kita telah berhasil mengonversi Numpy Array kembali ke DataFrame. Perhatikan bahwa
kita perlu memberikan nama kolom dengan argumen columns saat membuat DataFrame.
Setelah konversi, kamu bebas untuk melakukan manipulasi data dengan kemampuan
penuh dari Pandas atau Numpy, tergantung pada struktur data yang kamu gunakan.
Contoh:
Misalkan kita ingin menambahkan kolom baru ke DataFrame yang kita hasilkan dari
Numpy Array. Kolom baru ini akan berisi penjumlahan dari kolom 'A' dan 'B'. Mari kita coba.
# Menambahkan kolom baru ke DataFrame
df_from_np['D'] = df_from_np['A'] + df_from_np['B']
df_from_np
Output:
Seperti yang kamu lihat, kita telah berhasil menambahkan kolom baru ke DataFrame.
Salah satu fitur kunci dari DataFrame adalah indeksnya. Saat kamu mengonversi antara
DataFrame dan Numpy Array, perlu diperhatikan bagaimana indeks ditangani.
Jika DataFrame memiliki indeks kustom, mengonversinya ke Numpy Array hanya akan
mengambil nilai data, bukan indeks. Namun, saat mengonversi kembali ke DataFrame,
indeks default (0, 1, 2,...) akan diterapkan kecuali kamu memberikan indeks kustom.
Contoh:
# Membuat DataFrame dengan indeks kustom
df_custom_index = pd.DataFrame({
'X': [10, 20, 30],
'Y': [40, 50, 60]
}, index=['a', 'b', 'c'])
df_custom_index, df_from_custom_np
Output:
Dari contoh di atas, kamu dapat melihat bahwa DataFrame asli memiliki indeks kustom ('a',
'b', 'c'). Namun, setelah konversi bolak-balik, DataFrame yang dihasilkan memiliki indeks
default (0, 1, 2).
Bab 4. Visualisasi Data dengan Pandas
Tidak perlu library tambahan, cukup dengan Pandas, kamu sudah bisa membuat berbagai
jenis plot yang menarik. Tertarik? Ayo kita mulai eksplorasi!
Sebelum mulai, pastikan kita sudah mengimpor semua library yang dibutuhkan. Untuk
kebutuhan ini, kita hanya memerlukan Pandas dan NumPy untuk membuat data sintetis.
import pandas as pd
import numpy as np
Mari kita buat beberapa data sintetis untuk digunakan dalam contoh plot ini.
# Membuat DataFrame dengan data sintetis
np.random.seed(0)
df = pd.DataFrame({
'A': np.random.randn(100),
'B': np.random.randint(1, 100, 100),
'C': np.random.uniform(0, 1, 100)
})
df
Output:
Plot Sederhana
Salah satu hal yang paling menarik dari Pandas adalah kemampuannya untuk membuat plot
dengan satu baris kode. Ya, satu baris kode!
# Plot kolom 'A'
df['A'].plot()
Output:
Ini akan menghasilkan line plot dari kolom 'A'. Mudah, bukan?
Pandas mendukung berbagai jenis plot. Kamu bisa mengubah jenis plot dengan
menambahkan parameter kind dalam fungsi plot().
# Membuat histogram dari kolom 'B'
df['B'].plot(kind='hist')
Output:
Saat kita punya beberapa kolom data dan ingin melihat plot mereka bersamaan tapi
terpisah, kita bisa menggunakan subplots.
ax = df.plot(subplots=True, layout=(3,1), figsize=(10, 8),
title='Subplots untuk Setiap Kolom')
Output:
Dalam contoh ini, kita menggunakan parameter subplots=True dan layout=(3,1) untuk
menampilkan plot dari ketiga kolom dalam tiga baris dan satu kolom. Parameter figsize
digunakan untuk menentukan ukuran dari plot.
Kamu bisa juga menambahkan lebih banyak informasi visual dengan menggunakan
parameter style.
df['A'].plot(style='--', title='Garis Putus-Putus untuk Kolom A')
Output:
Dalam contoh ini, kita menggunakan style='--' untuk membuat garis putus-putus dalam plot.
Spesifikasi Warna
Warna dalam plot juga bisa disesuaikan dengan menggunakan parameter color.
df['C'].plot(color='red', title='Plot Kolom C dengan Warna Merah')
Output:
Menyimpan Plot
Jika kamu ingin menyimpan plot yang telah dibuat, gunakan metode savefig dari objek plot.
plot = df['A'].plot(title='Line Plot Kolom A')
plot.figure.savefig('plot.png')
Menambahkan Grid
Sebelumnya, mari kita generate dataframe sintetis untuk arena bermain kita:
# Importing necessary libraries
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.DataFrame(data)
df
Output:
Mengenal Grafik Batang (Bar Chart)
Sebelum kita mulai coding, mari kita pahami apa itu grafik batang. Grafik batang adalah
jenis grafik yang menggunakan bar atau batang vertikal atau horizontal untuk
menunjukkan perbandingan antara dua atau lebih kategori. Misalnya, kamu ingin
mengetahui penjualan dan pengeluaran perusahaan dari Januari hingga Desember.
Mari kita mulai dengan membuat grafik batang vertikal untuk data penjualan dan
pengeluaran kita.
# Grafik batang vertikal
ax = df.plot(x='Months', y=['Sales', 'Expenses'], kind='bar',
figsize=(12, 6))
plt.title('Monthly Sales and Expenses')
plt.xlabel('Months')
plt.ylabel('Amount in $')
plt.show()
Output:
Tadaa! Inilah grafik batang vertikal kita. Grafik ini menunjukkan penjualan dan
pengeluaran per bulan dari Januari hingga Desember. Dengan satu pandangan, kita sudah
bisa menilai bulan mana yang paling produktif atau bulan mana yang pengeluarannya
cukup besar.
Grafik Batang Horizontal
Nah, bagaimana jika kita ingin membalikkan grafik ini menjadi horizontal? Mudah saja.
Kamu hanya perlu merubah parameter kind menjadi 'barh'.
# Grafik batang horizontal
ax = df.plot(x='Months', y=['Sales', 'Expenses'], kind='barh',
figsize=(12, 6))
plt.title('Monthly Sales and Expenses')
plt.xlabel('Amount in $')
plt.ylabel('Months')
plt.show()
Output:
Dan voila! Inilah grafik batang horizontal kita. Dengan orientasi ini, terkadang lebih mudah
untuk membandingkan data antar kategori jika jumlahnya terlalu banyak.
Salah satu variasi dari grafik batang adalah grafik batang bertumpuk. Di sini, data untuk
beberapa kategori ditumpuk satu di atas yang lainnya. Ini bisa sangat berguna jika kamu
ingin menunjukkan komposisi antara beberapa kategori.
# Membuat grafik batang bertumpuk
ax = df.plot(x='Months', y=['Sales', 'Expenses'], kind='bar',
stacked=True, figsize=(12, 6))
plt.title('Monthly Sales and Expenses (Stacked)')
plt.xlabel('Months')
plt.ylabel('Amount in $')
plt.show()
Output:
Seperti yang kamu lihat, grafik batang bertumpuk memberikan gambaran tentang
komposisi Sales dan Expenses untuk setiap bulan. Ini bisa sangat berguna ketika kamu
ingin memahami bagaimana dua kategori atau lebih berinteraksi dalam satu grafik.
Kita sudah cukup familiar dengan grafik batang, tapi bagaimana dengan histogram?
Histogram adalah jenis grafik yang menggambarkan distribusi frekuensi dari suatu set data.
Daripada membandingkan kategori, histogram lebih sering digunakan untuk melihat
bagaimana data terdistribusi dalam suatu kisaran atau interval.
Misalnya, kita ingin mengetahui berapa kali penjualan berada dalam rentang tertentu, kita
bisa menggunakan histogram.
# Membuat histogram untuk kolom 'Sales'
df['Sales'].plot(kind='hist', bins=10, figsize=(12, 6))
plt.title('Sales Distribution')
plt.xlabel('Sales Amount in $')
plt.ylabel('Frequency')
plt.show()
Output:
Bam! Inilah histogram distribusi penjualan kita. Dari grafik ini, kita bisa melihat bahwa
jumlah penjualan yang paling sering terjadi adalah sekitar 600-800 dolar. Ini bisa jadi
informasi penting untuk analisis lebih lanjut, seperti menyiapkan stok atau mengevaluasi
strategi pemasaran.
Apakah kamu merasa bahwa histogram di atas masih kurang detil? Kita bisa menambahkan
lebih banyak "bin" atau interval untuk mendapatkan gambaran yang lebih jelas.
# Membuat histogram dengan 20 bins
df['Sales'].plot(kind='hist', bins=20, figsize=(12, 6))
plt.title('Sales Distribution')
plt.xlabel('Sales Amount in $')
plt.ylabel('Frequency')
plt.show()
Output:
Keren, kan? Dengan menambahkan lebih banyak "bin", kita mendapatkan gambaran yang
lebih detil tentang distribusi penjualan. Sekarang kita bisa melihat ada beberapa puncak
dan lembah, yang bisa jadi petunjuk untuk analisis lebih lanjut.
Kamu juga bisa menambahkan density plot atau kurva kepadatan pada histogram untuk
memahami distribusi dengan lebih baik.
# Membuat histogram dengan density plot
ax = df['Sales'].plot(kind='hist', bins=20, density=True, alpha=0.5,
figsize=(12, 6))
df['Sales'].plot(kind='kde', ax=ax)
plt.title('Sales Distribution with Density Plot')
plt.xlabel('Sales Amount in $')
plt.ylabel('Density')
plt.show()
Output:
Tada! Sekarang kamu memiliki histogram yang dilengkapi dengan density plot. Kurva
kepadatan ini memberikan gambaran yang lebih mulus tentang distribusi data. Ini sangat
berguna jika kamu ingin mengetahui bentuk distribusi data tanpa terpengaruh oleh jumlah
bin pada histogram.
Sebagai penutup, penting untuk memahami kapan sebaiknya menggunakan grafik batang
dan kapan menggunakan histogram.
1. Grafik Batang: Gunakan saat kamu ingin membandingkan beberapa kategori.
Misalnya, penjualan per bulan, per produk, atau per wilayah.
2. Histogram: Gunakan saat kamu ingin memahami distribusi data dalam kisaran atau
interval. Misalnya, umur pelanggan, durasi panggilan, atau rentang harga.
Dengan begitu, kamu akan menjadi lebih pandai dalam memilih alat visualisasi yang tepat
untuk data kamu!
Sebelumnya, mari kita generate dataframe sintetis untuk arena bermain kita:
# Import library yang diperlukan
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_line_scatter.head()
Output:
Scatter plot adalah diagram yang menggunakan koordinat kartesius untuk menampilkan
nilai dari dua variabel untuk satu set data. Maksudnya? Sederhananya, scatter plot bisa
memberi kamu gambaran tentang bagaimana dua variabel berhubungan satu sama lain.
Mari kita mulai dengan membuat scatter plot sederhana dari data yang telah kita siapkan.
# Membuat scatter plot sederhana
plt.scatter(df_line_scatter['X'], df_line_scatter['Y'])
plt.title('Simple Scatter Plot')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.show()
Output:
Tadaa! Inilah scatter plot sederhana yang menunjukkan hubungan antara variabel X dan Y.
Seperti yang bisa kamu lihat, titik-titik cenderung membentuk sebuah garis lurus naik, yang
mengindikasikan adanya hubungan positif antara X dan Y. Dalam kata lain, saat X
bertambah, Y juga ikut bertambah. Ini hanya awal, lho. Scatter plot bisa jauh lebih
kompleks dan informatif dari ini.
Sekarang, mari kita bicara tentang line plot. Line plot adalah jenis plot yang
menghubungkan titik data individual dengan garis. Ini sangat berguna untuk menampilkan
tren sepanjang waktu. Namun, itu tidak berarti line plot hanya terbatas untuk data waktu;
itu bisa digunakan untuk berbagai jenis data sekuensial.
Membuat line plot tidaklah sulit. Sebenarnya, jika kamu sudah tahu cara membuat scatter
plot, membuat line plot hanyalah selangkah lagi.
# Membuat line plot
plt.plot(df_line_scatter['X'], df_line_scatter['Y'], label='Linear
Relationship')
plt.title('Line Plot')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.legend()
plt.show()
Output:
Kamu lihat? Dengan garis yang menghubungkan setiap titik, sekarang kita bisa lebih mudah
melihat tren atau pola dalam data. Di sini, line plot memperlihatkan hubungan linear antara
variabel X dan Y, yang sejalan dengan apa yang kita lihat di scatter plot.
Hei, bagaimana jika kita ingin yang terbaik dari kedua dunia? Kita bisa, lho!
Mengkombinasikan scatter plot dan line plot dalam satu gambar bisa memberikan kita
kejelasan lebih tentang data. Scatter plot memberi kita titik data asli, sementara line plot
menunjukkan tren atau hubungan antara variabel.
# Mengkombinasikan scatter plot dan line plot
plt.scatter(df_line_scatter['X'], df_line_scatter['Y'], label='Data
Points')
plt.plot(df_line_scatter['X'], df_line_scatter['Y'], label='Linear
Relationship', linestyle='--')
plt.title('Combining Scatter and Line Plot')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.legend()
plt.show()
Output:
Keren, bukan? Dengan menggabungkan scatter plot dan line plot, kita sekarang bisa melihat
bagaimana data point individual mengikuti pola linear yang digambarkan oleh garis. Ini
adalah cara yang efektif untuk menyajikan data dan informasi dalam satu plot.
Kadang-kadang, kita ingin menunjukkan lebih banyak informasi dalam scatter plot kita.
Misalnya, apa yang terjadi jika kita punya tiga variabel? Kita bisa menggunakan ukuran titik
di scatter plot untuk menunjukkan nilai dari variabel ketiga.
Gunakan groupby() untuk mengelompokkan data berdasarkan satu atau lebih kolom.
Agregasi bisa dilakukan dengan metode seperti .sum(), .mean(), .max(), .min(), dan lainnya.
import pandas as pd
import numpy as np
aggregated = df.groupby('Kategori')['Nilai'].agg(range_func)
aggregated
Output:
5.3 Crosstab
Crosstab adalah fungsi di pandas yang memungkinkan kita untuk membuat tabel silang
yang bisa menunjukkan frekuensi dengan cara yang sangat sederhana.
Kita panggil lagi dataframe terakhir dari proses sebelumnya untuk mengingat kembali
bentuknya:
df
Output:
Membuat crosstab dengan lebih dari satu kolom pada sumbu indeks atau kolom.
df['AnotherCategory'] = np.random.choice(['L', 'M', 'N'], size=10)
crosstab_multi_col = pd.crosstab([df['Kategori'],
df['AnotherCategory']], df['Subkategori'])
crosstab_multi_col
Output:
Sebelumnya mari kita generate 2 dataframe sintetis untuk arena bermain kita:
# Membuat DataFrame lain untuk merge
df = pd.DataFrame({
'Kategori': ['A', 'B', 'C', 'D'],
'Data 1': np.random.rand(4)
})
# Menampilkan DataFrame 1
print("df 1:")
display(df.head())
# Membuat DataFrame lain untuk merge
df2 = pd.DataFrame({
'Kategori': ['C', 'D', 'E', 'F'],
'Data 2': np.random.rand(4)
})
# Menampilkan DataFrame 2
print("df 2:")
display(df2.head())
Output:
Merging
Output menunjukkan bahwa kita telah berhasil membuat DataFrame dengan kolom date
yang memiliki tipe data datetime64[ns], yang cocok untuk analisis deret waktu.
Penerapan 2: Mengatur Datetime sebagai Index
Sekarang, kita akan melanjutkan dengan Penerapan 2, di mana kita akan mengatur kolom
date sebagai index dari DataFrame. Ini akan memudahkan operasi selanjutnya yang
berkaitan dengan analisis deret waktu. Mari kita lakukan itu sekarang.
# Penerapan 2: Mengatur Datetime sebagai Index
df_time.set_index('date', inplace=True)
Kolom date kini telah menjadi index dari DataFrame, yang memudahkan kita untuk
melakukan operasi seleksi berdasarkan waktu.
Selanjutnya, kita akan melanjutkan dengan Penerapan 3. Kita akan memilih data untuk
tanggal 1 Januari 2022. Mari kita lihat cara melakukannya.
# Penerapan 3: Seleksi Berdasarkan Rentang Waktu
# Memilih data untuk tanggal 1 Januari 2022
selected_data = df_time['2022-01-01']
selected_data
Output:
Kita telah berhasil memilih data untuk seluruh hari pada 1 Januari 2022. Perhatikan bahwa
ada peringatan yang menyarankan kita untuk menggunakan .loc[] untuk seleksi ini pada
versi Pandas di masa mendatang. Untuk mematuhi praktik terbaik, kita seharusnya
menggunakan df_time.loc['2022-01-01'].
Penerapan 4: Resampling
Berikutnya, kita akan melanjutkan dengan Penerapan 4, di mana kita akan mengubah
frekuensi data menjadi rata-rata harian. Mari kita lakukan itu sekarang.
# Penerapan 4: Resampling - Mengubah frekuensi data menjadi rata-rata
harian
resampled_data = df_time.resample('D').mean()
resampled_data
Output:
Dengan menggunakan resampling, kita telah mengubah data menjadi rata-rata harian. Ini
menghasilkan satu nilai rata-rata untuk setiap hari dalam dataset.
Penerapan 5: Rolling dan Expanding
Mari kita gunakan data sintetis untuk memahami cara kerja window functions. Pertama,
kita harus mengimpor library Pandas.
import pandas as pd
import numpy as np
Rolling Window
Rolling window melakukan kalkulasi berdasarkan jumlah elemen tertentu dalam window.
Sintaks Dasar
df['Nilai_Rolling_Mean_3'] = df['Nilai'].rolling(window=3).mean()
df
Output:
Dalam contoh di atas, kita menghitung rata-rata dari setiap tiga elemen. Jadi, untuk tiga
elemen pertama, kita menghitung rata-rata mereka, lalu bergerak ke elemen kedua, ketiga,
dan keempat, dan seterusnya.
Expanding Window
Expanding window melakukan kalkulasi dari awal sampai elemen saat ini, sehingga
ukurannya bertambah seiring dengan bergeraknya index.
Sintaks Dasar
Dengan expanding(), setiap nilai rata-rata dihitung dari awal sampai baris saat ini.
Exponential weighted window memberikan bobot yang lebih besar pada nilai yang lebih
baru.
Sintaks Dasar
df['Nilai_Ewm_Mean_3'] = df['Nilai'].ewm(span=3).mean()
df
Output:
Dalam contoh ini, ewm dengan span=3 memberikan bobot yang lebih besar pada data
terbaru dalam perhitungan rata-rata.
Dasar-dasar Querying
Kita dapat menggunakan operator [] atau metode .loc[] untuk memilih baris berdasarkan
kondisi.
Contoh:
import pandas as pd
# Query menggunakan []
df[df['usia'] > 25]
Output:
df.loc[df['kota'] == 'Bandung']
Output:
Menggunakan .query()
Metode .query() di Pandas memungkinkan kita untuk menulis kondisi querying dalam
bentuk string yang lebih mudah dibaca dan ditulis.
Contoh:
df.query('usia > 25 and kota == "Bandung"')
Output:
Multiple Conditions
Contoh:
df.query('usia >= 25 and kota != "Jakarta"')
Output:
Menggunakan Variabel dalam Query
Contoh:
batas_usia = 25
df.query('usia > @batas_usia')
Output:
Pandas menyediakan fungsi untuk string yang bisa digunakan dalam querying, seperti
str.startswith(), str.contains(), dll.
Contoh:
df[df['nama'].str.startswith('B')]
Output:
Querying sering dikombinasikan dengan fungsi lain seperti .groupby(), .sort_values(), dan
lainnya.
Contoh:
df.query('usia > 25').groupby('kota').mean()
Output:
Menggunakan isin untuk Filtering Berdasarkan List
Contoh:
kota_terpilih = ['Bandung', 'Yogyakarta']
df[df['kota'].isin(kota_terpilih)]
Output:
Pandas mendukung operator kondisional standar seperti ==, !=, >, <, >=, dan <= untuk
membuat query yang kompleks.
Contoh:
df[(df['usia'] >= 25) & (df['kota'] != 'Jakarta')]
Output:
Menggunakan .eval()
Metode .eval() sangat berguna untuk evaluasi ekspresi yang kompleks dan bisa
meningkatkan kinerja.
Contoh:
df['total'] = df.eval('usia * 2') # Menambah kolom baru yang merupakan
hasil perhitungan
df
Output:
Indexing dengan .iloc[]
Contoh:
df.iloc[0:2] # Mengambil dua baris pertama
Output:
Regular expressions (regex) bisa digunakan dalam Pandas untuk query yang memerlukan
pencocokan pola yang lebih kompleks.
Contoh:
import re
df[df['nama'].str.contains('di$', regex=True)] # Nama yang berakhir
dengan 'di'
Output:
Mengelola data yang hilang (missing data) adalah bagian penting dari querying.
Contoh:
df[df['usia'].notna()] # Memilih baris dimana usia tidak null
Output:
Bab 6. IO di Pandas: Memuat dan
Menyimpan Data
6.1 Menyimpan Data dari CSV dengan Pandas
Menyimpan data ke dalam format CSV (Comma-Separated Values) adalah salah satu cara
paling dasar namun efektif dalam pengelolaan data. Format CSV populer karena
kemudahannya dalam berbagi dan kompatibilitas dengan berbagai platform dan aplikasi.
Pandas menyediakan fungsi .to_csv() untuk menyimpan DataFrame ke dalam file CSV.
Contoh Sederhana
import pandas as pd
# Menyimpan ke CSV
df.to_csv('data_sederhana.csv')
Menentukan Kolom
Menghilangkan Index
Secara default, Pandas akan menyimpan index. Kamu bisa memilih untuk tidak
menyimpannya.
df.to_csv('tanpa_index.csv', index=False)
Pemisah Kustom
Encoding Khusus
Jika bekerja dengan data dalam bahasa atau format tertentu, kamu bisa menentukan
encoding.
df.to_csv('data_utf8.csv', encoding='utf-8')
Ketika bekerja dengan set data yang sangat besar, mungkin perlu untuk
mempertimbangkan aspek kinerja dan efisiensi.
Compresi File
Kamu dapat menyimpan data dalam format terkompresi untuk menghemat ruang.
df.to_csv('data_kompresi.zip', compression='zip')
Header Kustom
Kamu dapat menentukan header kustom saat menyimpan ke CSV, terutama berguna jika
kamu ingin mengubah nama kolom saat ekspor.
Contoh:
df.to_csv('data_header_kustom.csv', header=['Nama Lengkap', 'Umur'])
Kadang kala, kamu mungkin ingin menyimpan angka dengan format tertentu, seperti
jumlah desimal tertentu.
Contoh:
df.to_csv('data_format.csv', float_format='%.2f')
Jika kamu ingin menambahkan data ke file CSV yang sudah ada, gunakan mode append.
Contoh:
df.to_csv('data_append.csv', mode='a', header=False)
Pandas menggunakan fungsi .read_csv() untuk membaca file CSV dan mengubahnya
menjadi DataFrame.
Contoh Dasar
Kita akan mencoba membaca file tanpa_index.csv yang di subbab sebelumnya telah
disimpan.
import pandas as pd
Pandas memungkinkan berbagai opsi saat membaca CSV, yang memudahkan penanganan
berbagai kasus.
Menentukan Kolom
Pandas memungkinkan kamu untuk menentukan cara menangani data yang hilang.
df = pd.read_csv('tanpa_index.csv', na_values=['NA', 'kosong'])
df
Output:
Kamu dapat menggunakan salah satu kolom dari CSV sebagai index DataFrame.
df = pd.read_csv('tanpa_index.csv', index_col='nama')
df
Output:
Contoh Dasar
# Membuat DataFrame sederhana
data = {'nama': ['Ayu', 'Budi', 'Citra'],
'usia': [23, 30, 22]}
df = pd.DataFrame(data)
# Menyimpan ke Excel
df.to_excel('contoh_data.xlsx')
Menentukan Sheet
Kamu dapat menyimpan DataFrame ke dalam sheet tertentu dalam file Excel.
with pd.ExcelWriter('data_multi_sheet.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1')
df.to_excel(writer, sheet_name='Sheet2')
Di bab ini, kita telah menjelajahi cara-cara efisien untuk memuat dan menyimpan data
menggunakan Pandas, khususnya melalui format CSV dan Excel yang banyak digunakan
dalam dunia data. Kita telah belajar bagaimana Pandas memudahkan proses membaca data
dari CSV dan Excel dengan berbagai opsi kustomisasi yang dapat disesuaikan dengan
kebutuhan spesifik dataset kita.
Penutup
Kita telah menelusuri seluk-beluk Pandas, sebuah perpustakaan esensial dalam dunia Data
Science. Mulai dari sejarahnya, konsep dasar, aplikasi dalam pembersihan dan visualisasi
data, hingga operasi lanjutan, semuanya telah kita bahas untuk membantu kamu menguasai
Pandas. Kita juga telah melihat bagaimana Pandas digunakan dalam analisis keuangan,
memberikan kamu pemahaman praktis tentang kekuatan alat ini dalam mengolah dan
menganalisis data keuangan.
Sebagai penutup, izinkan saya memberikan beberapa tips dan trik untuk memaksimalkan
pembelajaran kamu:
● Praktek Rutin: Cara terbaik untuk mempelajari Pandas adalah dengan praktik.
Cobalah untuk mengerjakan proyek atau latihan kecil setiap hari.
● Eksplorasi Dataset Nyata: Gunakan dataset dari dunia nyata untuk mendapatkan
pengalaman praktis. Situs seperti Kaggle menyediakan banyak dataset yang bisa
kamu gunakan.
● Bergabung dengan Komunitas: Bergabunglah dengan forum atau grup diskusi
tentang Python dan Pandas. Komunitas seperti Stack Overflow atau Reddit sangat
membantu untuk bertanya dan berbagi pengetahuan.
● Belajar dari Kesalahan: Jangan takut membuat kesalahan. Kesalahan adalah bagian
dari proses belajar dan seringkali merupakan guru terbaik.
● Manfaatkan Sumber Online: Ada banyak sumber belajar online seperti tutorial,
video, dan kursus yang dapat membantu kamu memahami konsep-konsep yang
rumit.
● Eksperimen dengan Proyek Pribadi: Coba aplikasikan Pandas dalam proyek atau ide
pribadi kamu. Ini akan membantu memperdalam pemahaman kamu tentang cara
kerjanya dalam skenario nyata.
● Tetap Update: Dunia data science terus berkembang. Pastikan untuk tetap mengikuti
perkembangan terbaru di Pandas dan teknologi terkait.