Artikel ini membahas standar penggunaan library pandas pada python yang sering saya gunakan dalam melakukan pembersihan maupun penyortiran data, isi artikel akan ditambah sesuai kebutuhan.
Pandas merupakan salah satu library wajib yang harus dikuasai oleh pengguna python. Library ini dapat membantu kita dalam membaca dan memproses data dari berbagai file tabel seperti xls, csv, xlsx, dataframe, dll. Cara mengimport pandas sebagai berikut:
import pandas as pd
Berikut ini saya menggenerate dataframe sederhana sebagai ujicoba:
import pandas as pd
data = {
"Name": ["Alice", "Bob", "Charlie", "David", "Eva"],
"Age": [25, 30, 35, 40, 28],
"City": ["New York", "London", "Paris", "Berlin", "Tokyo"],
"Salary": [50000, 60000, 75000, 80000, 62000]
}
df = pd.DataFrame(data)
print(df)
# hasil yang didapatkan :
Name Age City Salary
0 Alice 25 New York 50000
1 Bob 30 London 60000
2 Charlie 35 Paris 75000
3 David 40 Berlin 80000
4 Eva 28 Tokyo 62000
df.info() : membaca info dataframe yang meliputi nama kolom, banyaknya data non-null, tipe data, dan info-info lainnya dari kolom tersebut. Saya menggunakan ini untuk mengecek tipe data (Dtype) dari tiap-tiap kolom, jika misalnya: Age dtype-nya object, maka ada salah satu record yang bukan angka, maka kita harus proses dulu misalnya dihapus agar tidak mengganggu proses lain.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Name 5 non-null object
1 Age 5 non-null int64
2 City 5 non-null object
3 Salary 5 non-null int64
dtypes: int64(2), object(2)
memory usage: 292.0+ bytes
df.describe() : untuk menampilkan nilai count, mean, std, min, percentile dari kolom yang bertipe numerik (pastikan tidak ada record yang NaN (not a number) pada kolom)
Age Salary
count 5.00000 5.000000
mean 31.60000 65400.000000
std 5.94138 12074.767078
min 25.00000 50000.000000
25% 28.00000 60000.000000
50% 30.00000 62000.000000
75% 35.00000 75000.000000
max 40.00000 80000.000000
df.columns : untuk menampilkan seluruh kolom pada dataframe
Index(['Name', 'Age', 'City', 'Salary'], dtype='object')
Jika ingin mendapatkan salah satu kolom dapat menggunakan bracket [<index_column>] atau jika semuanya dapat di loop, contoh:
df.columns[0]
#hasilnya 'Name'
df.columns[1]
#hasilnya 'Age'
for col in columns:
print(col)
#hasilnya
Name
Age
City
Salary
df[[col_names]] : submatriks dengan menggunakan nama kolom.
df[['Name', 'Age']]
#hasilnya:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
3 David 40
4 Eva 28
df[<col_name>] : mengambil data series (kolom), kita dapat melakukan filter sekaligus dengan menggunakan operasi logika (==, >, >=, <, <=, !=).
df['Name']
#hasilnya:
0 Alice
1 Bob
2 Charlie
3 David
4 Eva
Name: Name, dtype: object
df['Age']>34
#hasilnya
0 False
1 False
2 True
3 True
4 False
Name: Age, dtype: bool
#hasil akan menampilkan nilai boolean, dimana True artinya seluruh baris yang sesuai dengan kategori 'Age' lebih besar dari 34, sedangkan false sebaliknya.
Kita dapat menggabungkan beberapa data series yang akan difilter, dengan memasukan masing-masing kategori dengan tanda kurung.
(df['Age']>34) & (df['Name']=='David')
#hasilnya:
0 False
1 False
2 False
3 True
4 False
df.iloc[: , :] : slicing matriks, ini sangat sering saya gunakan untuk mengambil sub-matriks dengan memainkan nomor indeksnya.
df.iloc[:]
df.iloc[:,:]
# [<baris>,<kolom>] , tanda ':' (titik dua) artinya baca seluruh baris atau kolom
#hasilnya:
Name Age City Salary
0 Alice 25 New York 50000
1 Bob 30 London 60000
2 Charlie 35 Paris 75000
3 David 40 Berlin 80000
4 Eva 28 Tokyo 62000
df.iloc[:3,:]
#baca baris dengan index 0 hingga 2 (nilai 3 tidak ikut ditampilkan), sedangkan kolom baca semua
#hasilnya:
Name Age City Salary
0 Alice 25 New York 50000
1 Bob 30 London 60000
2 Charlie 35 Paris 75000
df.iloc[3]
df.iloc[3,:]
#baca hanya baris dengan indeks 3
#hasilnya:
Name David
Age 40
City Berlin
Salary 80000
Name: 3, dtype: object
df.iloc[3:,:]
#baca mulai baris dengan indeks 3 hingga selesai, sedangkan kolom baca semua
#hasilnya:
Name Age City Salary
3 David 40 Berlin 80000
4 Eva 28 Tokyo 62000
df.iloc[:,:2]
#baca semua baris, namun kolom hanya baca mulai dari 0 hingga 1
#hasilnya:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
3 David 40
4 Eva 28
df.loc[] : fungsi seperti iloc, namun kita dapat menggunakan label (nama kolom atau baris) sebagai pengganti angkat indeks, menurut saya kelebihan dari loc, kita bisa sekalian memfilter baris berdasarkan kondisi.
df.loc[2,['Name', 'Age']]
#hasilnya:
Name Charlie
Age 35
Name: 2, dtype: object
df.loc[2:,['Name', 'Age']]
#hasilnya:
Name Age
2 Charlie 35
3 David 40
4 Eva 28
df.loc[df['Age']>=35]
#memfilter seluruh baris dimana, kolom 'Age' >=35
#hasilnya:
Name Age City Salary
2 Charlie 35 Paris 75000
3 David 40 Berlin 80000
df.isna() : fungsi untuk mengecek setiap data apakah mengandung nilai NA (null, atau missing value) atau tidak.
import pandas as pd
tabel = pd.DataFrame({'No':[1,2,3,4,5],'Nama':['Andi', None, 'Citra', 'Dewi', 'Erni'], 'Umur':[25,None,15,17,28]}, )
tabel
#output pandas.core.frame.DataFrame
No Nama Umur
0 1 Andi 25.0
1 2 None NaN
2 3 Citra 15.0
3 4 Dewi 17.0
4 5 Erni 28.0
tabel.isna()
#output pandas.core.frame.DataFrame
No Nama Umur
0 False False False
1 False True True
2 False False False
3 False False False
4 False False False
#catatan : terlihat bahwa nilai True artinya data kosong None, namun perlu diingat empty string '' tidak termasuk kedalam None
tabel[tabel.isna().any(axis=1)]
#output pandas.core.frame.DataFrame
No Nama Umur
1 2 None NaN
#catatan: mencetak row yang memiliki setidaknya 1 data yang memiliki nilai True
df.notna() : fungsi ini kebalikan dari df.isna()
import pandas as pd
tabel = pd.DataFrame({'No':[1,2,3,4,5],'Nama':['Andi', None, 'Citra', 'Dewi', 'Erni'], 'Umur':[25,None,15,17,28]}, )
tabel.notna()
#output pandas.core.frame.DataFrame
No Nama Umur
0 True True True
1 True False False
2 True True True
3 True True True
4 True True True
tabel[tabel.notna().all(axis=1)]
#output pandas.core.frame.DataFrame
No Nama Umur
0 1 Andi 25.0
2 3 Citra 15.0
3 4 Dewi 17.0
4 5 Erni 28.0
#catatan: hanya mencetak row yang semua datanya bernilai True
