Seleksi dan Filter¶
Pandas menyediakan berbagai cara untuk memilih dan memfilter data dalam DataFrame.
Seleksi Kolom¶
Satu Kolom¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra'],
'umur': [20, 22, 21],
'nilai': [85, 90, 88]
})
# Menggunakan bracket notation
print(df['nama'])
# 0 Ahmad
# 1 Budi
# 2 Citra
# Name: nama, dtype: object
# Menggunakan dot notation
print(df.nama) # Sama hasilnya
Beberapa Kolom¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra'],
'umur': [20, 22, 21],
'nilai': [85, 90, 88]
})
# Pilih beberapa kolom (return DataFrame)
print(df[['nama', 'nilai']])
# nama nilai
# 0 Ahmad 85
# 1 Budi 90
# 2 Citra 88
# Simpan list kolom
cols = ['nama', 'umur']
print(df[cols])
Seleksi Baris dengan loc dan iloc¶
loc (Label-based)¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani'],
'umur': [20, 22, 21, 23],
'nilai': [85, 90, 88, 92]
}, index=['m1', 'm2', 'm3', 'm4'])
# Satu baris
print(df.loc['m1'])
# nama Ahmad
# umur 20
# nilai 85
# Name: m1, dtype: object
# Beberapa baris
print(df.loc[['m1', 'm3']])
# Range baris (inclusive)
print(df.loc['m1':'m3'])
# Baris dan kolom spesifik
print(df.loc['m1', 'nama']) # Ahmad
print(df.loc['m1':'m2', ['nama', 'nilai']])
iloc (Integer-based)¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani'],
'umur': [20, 22, 21, 23],
'nilai': [85, 90, 88, 92]
})
# Satu baris (by position)
print(df.iloc[0])
# Beberapa baris
print(df.iloc[[0, 2]])
# Range baris (exclusive)
print(df.iloc[0:2]) # Baris 0 dan 1
# Baris dan kolom by position
print(df.iloc[0, 1]) # Baris 0, kolom 1 = 20
print(df.iloc[0:2, 1:3]) # Slice baris dan kolom
# Baris terakhir
print(df.iloc[-1])
Filter Baris dengan Kondisi¶
Kondisi Tunggal¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani'],
'umur': [20, 22, 21, 23],
'nilai': [85, 90, 88, 92]
})
# Filter dengan kondisi
print(df[df['nilai'] > 85])
# nama umur nilai
# 1 Budi 22 90
# 2 Citra 21 88
# 3 Dani 23 92
# Filter dengan sama dengan
print(df[df['umur'] == 21])
# Filter dengan string
print(df[df['nama'] == 'Ahmad'])
Kondisi Kombinasi¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani'],
'umur': [20, 22, 21, 23],
'jurusan': ['TI', 'SI', 'TI', 'SI'],
'nilai': [85, 90, 88, 92]
})
# AND: gunakan &
print(df[(df['nilai'] >= 85) & (df['umur'] < 23)])
# OR: gunakan |
print(df[(df['jurusan'] == 'TI') | (df['nilai'] > 90)])
# NOT: gunakan ~
print(df[~(df['jurusan'] == 'TI')]) # Bukan TI
Peringatan
Gunakan tanda kurung untuk setiap kondisi saat mengkombinasikan kondisi dengan & atau |.
isin()¶
Filter berdasarkan nilai dalam list:
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani', 'Eka'],
'jurusan': ['TI', 'SI', 'TI', 'SI', 'TK']
})
# Filter yang jurusannya TI atau SI
print(df[df['jurusan'].isin(['TI', 'SI'])])
# Filter yang nama-nya dalam list
nama_list = ['Ahmad', 'Citra', 'Eka']
print(df[df['nama'].isin(nama_list)])
query()¶
Cara lebih readable untuk filter:
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani'],
'umur': [20, 22, 21, 23],
'nilai': [85, 90, 88, 92]
})
# Menggunakan query
print(df.query('nilai > 85'))
print(df.query('umur >= 21 and nilai > 85'))
print(df.query('nama == "Ahmad"'))
# Dengan variabel
min_nilai = 88
print(df.query('nilai >= @min_nilai'))
Filter String¶
Metode String¶
import pandas as pd
df = pd.DataFrame({
'nama': ['Ahmad Yani', 'Budi Santoso', 'Citra Dewi', 'Dani Ahmad'],
'email': ['ahmad@udn.ac.id', 'budi@gmail.com', 'citra@udn.ac.id', 'dani@yahoo.com']
})
# Mengandung substring
print(df[df['nama'].str.contains('Ahmad')])
# Diawali dengan
print(df[df['nama'].str.startswith('B')])
# Diakhiri dengan
print(df[df['email'].str.endswith('udn.ac.id')])
# Case insensitive
print(df[df['nama'].str.lower().str.contains('ahmad')])
# Regex
print(df[df['email'].str.contains(r'@\w+\.com$', regex=True)])
Memilih Berdasarkan Tipe Data¶
import pandas as pd
import numpy as np
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra'],
'umur': [20, 22, 21],
'ipk': [3.5, 3.8, 3.6],
'aktif': [True, True, False]
})
# Pilih kolom numerik saja
print(df.select_dtypes(include=[np.number]))
# Pilih kolom object (string) saja
print(df.select_dtypes(include=['object']))
# Exclude tipe tertentu
print(df.select_dtypes(exclude=[np.number]))
Contoh Praktis¶
Analisis Data Mahasiswa¶
import pandas as pd
# Data mahasiswa
df = pd.DataFrame({
'nama': ['Ahmad', 'Budi', 'Citra', 'Dani', 'Eka'],
'jurusan': ['TI', 'SI', 'TI', 'SI', 'TI'],
'semester': [4, 6, 4, 8, 2],
'ipk': [3.5, 3.2, 3.8, 3.0, 3.6]
})
# Mahasiswa TI semester 4 dengan IPK > 3.5
hasil = df[(df['jurusan'] == 'TI') &
(df['semester'] == 4) &
(df['ipk'] > 3.5)]
print(hasil)
# Top 3 IPK tertinggi
top3 = df.nlargest(3, 'ipk')
print(top3)
# Bottom 2 IPK terendah
bottom2 = df.nsmallest(2, 'ipk')
print(bottom2)
Filter dengan Kondisi Kompleks¶
import pandas as pd
df = pd.DataFrame({
'produk': ['A', 'B', 'C', 'D', 'E'],
'kategori': ['Elektronik', 'Fashion', 'Elektronik', 'Makanan', 'Fashion'],
'harga': [1000, 500, 1500, 200, 800],
'stok': [10, 25, 5, 100, 15]
})
# Produk elektronik mahal dengan stok rendah
filter1 = (df['kategori'] == 'Elektronik') & (df['harga'] > 1000) & (df['stok'] < 10)
print(df[filter1])
# Produk dengan harga antara 500-1000
print(df[(df['harga'] >= 500) & (df['harga'] <= 1000)])
# Atau dengan between
print(df[df['harga'].between(500, 1000)])
Latihan¶
Dari dataset mahasiswa, filter mahasiswa semester > 4 dengan IPK >= 3.5
Filter email yang berasal dari domain udn.ac.id
Pilih 5 data dengan nilai tertinggi dari setiap jurusan
Filter data yang nama-nya mengandung lebih dari satu kata