Viewing & Selecting Data
Setelah mempelajari cara mendeskripsikan DataFrame, langkah berikutnya adalah belajar melihat dan memilih data.
Ketika bekerja dengan dataset, kita sering tidak membutuhkan seluruh data sekaligus.
Kita mungkin ingin:
- Melihat beberapa baris pertama.
- Melihat beberapa baris terakhir.
- Memilih satu baris tertentu.
- Memilih beberapa baris.
- Memilih satu kolom.
- Memilih beberapa kolom.
- Mencari data berdasarkan kondisi tertentu.
Pandas menyediakan berbagai cara untuk melakukan hal tersebut.
Menyiapkan DataFrame
Sebagai contoh, kita akan menggunakan dataset sederhana mengenai penjualan mobil.
import pandas as pd
car_sales = pd.read_csv("car-sales.csv")
Kita dapat membayangkan DataFrame seperti berikut:
| Index | Make | Colour | Odometer (KM) | Doors | Price |
|---|---|---|---|---|---|
| 0 | Toyota | White | 150000 | 4 | 4000 |
| 1 | Honda | Red | 120000 | 4 | 5000 |
| 2 | BMW | Black | 80000 | 4 | 15000 |
| 3 | Nissan | Blue | 90000 | 4 | 7000 |
| 4 | Toyota | Green | 110000 | 4 | 6000 |
Pada materi ini kita akan menggunakan DataFrame tersebut untuk memahami berbagai teknik pemilihan data.
Melihat Sebagian Data
Ketika mendapatkan dataset yang besar, kita biasanya tidak perlu langsung menampilkan seluruh DataFrame.
Misalnya dataset memiliki:
10.000 baris
Jika kita menjalankan:
print(car_sales)
akan sangat tidak praktis untuk melihat seluruh data.
Sebagai gantinya, kita dapat melihat sebagian data.
Pandas menyediakan dua method yang sangat berguna:
head()
dan:
tail()
Menggunakan .head()
Method:
car_sales.head()
digunakan untuk menampilkan 5 baris pertama DataFrame secara default.
Contohnya:
car_sales.head()
Hasilnya kurang lebih:
| Index | Make | Colour | Odometer (KM) | Doors | Price |
|---|---|---|---|---|---|
| 0 | Toyota | White | 150000 | 4 | 4000 |
| 1 | Honda | Red | 120000 | 4 | 5000 |
| 2 | BMW | Black | 80000 | 4 | 15000 |
| 3 | Nissan | Blue | 90000 | 4 | 7000 |
| 4 | Toyota | Green | 110000 | 4 | 6000 |
Cara ini sangat berguna untuk mendapatkan gambaran cepat mengenai isi dataset.
Mengubah Jumlah Baris dengan .head()
Secara default:
car_sales.head()
menampilkan 5 baris.
Namun kita dapat menentukan jumlah baris yang ingin ditampilkan.
Contohnya:
car_sales.head(7)
Artinya:
Tampilkan 7 baris pertama
Contoh lainnya:
car_sales.head(3)
akan menampilkan:
Baris 0
Baris 1
Baris 2
Jadi angka yang diberikan kepada head() menentukan jumlah baris dari bagian awal DataFrame yang ingin kita lihat.
Kapan Menggunakan .head()?
.head() sangat berguna ketika:
- baru membuka dataset.
- ingin mengetahui bentuk data.
- ingin memastikan file berhasil dibaca.
- ingin melihat beberapa contoh data.
- ingin memeriksa hasil manipulasi data.
Misalnya setelah membaca CSV:
car_sales = pd.read_csv("car-sales.csv")
kita dapat langsung melakukan:
car_sales.head()
Dengan begitu kita dapat memastikan apakah dataset berhasil dibaca dan terlihat seperti yang diharapkan.
Menggunakan .tail()
Jika head() digunakan untuk melihat bagian awal DataFrame, maka tail() digunakan untuk melihat bagian akhir.
Contohnya:
car_sales.tail()
Secara default, tail() menampilkan 5 baris terakhir.
Mengubah Jumlah Baris dengan .tail()
Sama seperti head(), kita dapat menentukan jumlah baris.
Contohnya:
car_sales.tail(3)
Artinya:
Tampilkan 3 baris terakhir
Misalnya DataFrame memiliki 10 baris, maka yang ditampilkan adalah:
Baris 7
Baris 8
Baris 9
.head() vs .tail()
Perbedaannya sederhana:
| Method | Fungsi |
|---|---|
df.head() | Melihat 5 baris pertama |
df.head(n) | Melihat n baris pertama |
df.tail() | Melihat 5 baris terakhir |
df.tail(n) | Melihat n baris terakhir |
Secara visual:
DataFrame
┌─────────────────┐
│ Baris pertama │ ← head()
│ Baris kedua │
│ Baris ketiga │
│ ... │
│ Baris terakhir │ ← tail()
└─────────────────┘
Keduanya merupakan cara cepat untuk melakukan pemeriksaan awal terhadap dataset.
Memilih Data dengan .loc dan .iloc
Selain melihat bagian awal dan akhir data, kita juga dapat memilih data tertentu.
Pandas menyediakan dua cara penting:
.loc
dan:
.iloc
Keduanya digunakan untuk memilih data, tetapi memiliki konsep yang berbeda.
Perbedaan utama:
.loc
↓
berdasarkan label
.iloc
↓
berdasarkan posisi
.loc - Location
.loc digunakan untuk memilih data berdasarkan label index.
Misalnya DataFrame memiliki index:
0
1
2
3
4
Kita dapat memilih data dengan:
car_sales.loc[3]
Artinya:
Ambil data dengan label index 3
Jika index tersebut memiliki data:
Nissan | Blue | 90000 | 4 | 7000
maka baris tersebut akan dikembalikan.
Memahami Label Index
Perhatikan DataFrame:
| Index | Make |
|---|---|
| 0 | Toyota |
| 1 | Honda |
| 2 | BMW |
| 3 | Nissan |
| 4 | Toyota |
Jika kita menggunakan:
car_sales.loc[3]
Pandas mencari:
Label index = 3
Kemudian mengembalikan baris tersebut.
Jadi konsep utama .loc adalah:
.loc
↓
Cari berdasarkan label
.iloc - Integer Location
.iloc digunakan untuk memilih data berdasarkan posisi.
Posisi dimulai dari:
0
Misalnya:
| Posisi | Index | Make |
|---|---|---|
| 0 | 0 | Toyota |
| 1 | 1 | Honda |
| 2 | 2 | BMW |
| 3 | 3 | Nissan |
| 4 | 4 | Toyota |
Jika kita menggunakan:
car_sales.iloc[3]
maka Pandas mengambil data pada posisi ke-3.
Dalam contoh ini hasilnya kebetulan sama dengan loc[3] karena label index juga berurutan dari 0.
Perbedaan .loc dan .iloc
Untuk DataFrame dengan index default:
0, 1, 2, 3, 4
hasil .loc dan .iloc mungkin terlihat sama.
Contohnya:
car_sales.loc[3]
dan:
car_sales.iloc[3]
keduanya dapat menghasilkan baris yang sama.
Namun konsepnya berbeda:
.loc
→ berdasarkan label
.iloc
→ berdasarkan posisi
Perbedaan ini menjadi sangat penting ketika index DataFrame tidak lagi menggunakan angka berurutan.
Contoh Index Tidak Berurutan
Bayangkan DataFrame memiliki index:
| Index | Make |
|---|---|
| 10 | Toyota |
| 20 | Honda |
| 30 | BMW |
| 40 | Nissan |
Sekarang:
car_sales.loc[30]
berarti:
Cari label index 30
Sedangkan:
car_sales.iloc[3]
berarti:
Ambil data pada posisi ke-3
Hasilnya:
.loc[30]
→ BMW
.iloc[3]
→ Nissan
Ini menunjukkan mengapa memahami perbedaan .loc dan .iloc sangat penting.
Slicing dengan .iloc
Slicing digunakan untuk mengambil sebagian data berdasarkan rentang posisi.
Contohnya:
car_sales.iloc[:3]
Artinya:
Ambil data dari posisi awal
sampai sebelum posisi 3
Maka posisi yang diambil:
0
1
2
Posisi 3 tidak termasuk.
Memahami Slicing
Perhatikan:
car_sales.iloc[:3]
dapat dibaca:
:
→ mulai dari awal
3
→ berhenti sebelum posisi 3
Sehingga:
0 ✓
1 ✓
2 ✓
3 ✗
Ini mengikuti aturan slicing yang umum dalam Python.
Contoh Slicing dengan .iloc
Misalnya:
car_sales.iloc[1:4]
Maka posisi yang diambil:
1
2
3
Posisi:
4
tidak termasuk.
Secara umum:
.iloc[start:stop]
mengambil data mulai dari start hingga sebelum stop.
Slicing dengan .loc
Slicing menggunakan .loc memiliki aturan yang berbeda ketika menggunakan label.
Contohnya:
car_sales.loc[:3]
Jika indexnya:
0
1
2
3
4
maka label yang diambil adalah:
0
1
2
3
Perhatikan bahwa label 3 ikut termasuk.
Perbedaan Slicing .loc dan .iloc
Ini merupakan salah satu hal yang penting untuk diingat.
Dengan:
car_sales.iloc[:3]
yang diambil:
0
1
2
Sedangkan:
car_sales.loc[:3]
yang diambil:
0
1
2
3
Perbedaannya:
.iloc
→ batas akhir tidak termasuk
.loc
→ label batas akhir termasuk
Untuk pemula, konsep ini perlu diperhatikan agar tidak salah mengambil data.
Memilih Kolom
Selain memilih baris, kita juga sering perlu memilih kolom tertentu.
Misalnya DataFrame memiliki:
Make
Colour
Odometer (KM)
Doors
Price
Kita mungkin hanya ingin mengambil kolom:
Make
Pandas menyediakan beberapa cara untuk melakukannya.
Cara yang paling umum adalah menggunakan bracket notation.
Bracket Notation
Contohnya:
car_sales["Make"]
Perintah tersebut memilih kolom:
Make
Hasilnya berupa Series.
Secara sederhana:
DataFrame
↓
["Make"]
↓
Series
Mengapa Bracket Notation Direkomendasikan?
Bracket notation merupakan cara yang umum dan aman untuk memilih kolom.
Contohnya:
car_sales["Odometer (KM)"]
Cara ini tetap dapat digunakan meskipun nama kolom mengandung:
- spasi
- tanda kurung
- karakter tertentu
Misalnya:
car_sales["Odometer (KM)"]
Dot Notation
Pandas juga memungkinkan kita memilih kolom menggunakan dot notation.
Contohnya:
car_sales.Make
Ini dapat digunakan untuk kolom sederhana seperti:
Make
atau:
Price
Contohnya:
car_sales.Price
Keterbatasan Dot Notation
Dot notation tidak cocok untuk semua nama kolom.
Misalnya nama kolom:
Odometer (KM)
Kita tidak dapat menuliskannya seperti:
car_sales.Odometer (KM)
Kode tersebut tidak valid.
Karena itu, gunakan bracket notation:
car_sales["Odometer (KM)"]
Bracket vs Dot Notation
Perbandingannya:
| Cara | Contoh | Keterangan |
|---|---|---|
| Bracket notation | car_sales["Make"] | Direkomendasikan |
| Dot notation | car_sales.Make | Ringkas tetapi memiliki keterbatasan |
Untuk pembelajaran dan project nyata, biasakan menggunakan:
car_sales["Make"]
terutama jika nama kolom berasal dari dataset yang belum kita kontrol.
Memilih Beberapa Kolom
Kita juga dapat memilih lebih dari satu kolom.
Contohnya:
car_sales[["Make", "Price"]]
Perhatikan bahwa terdapat dua pasang bracket:
car_sales[
["Make", "Price"]
]
Bracket bagian luar digunakan untuk memilih data dari DataFrame.
List bagian dalam berisi nama kolom yang ingin dipilih.
Hasilnya adalah DataFrame baru yang hanya memiliki:
Make
Price
Boolean Indexing
Salah satu fitur Pandas yang sangat penting adalah Boolean Indexing.
Boolean Indexing memungkinkan kita memilih baris berdasarkan kondisi tertentu.
Contohnya:
car_sales[car_sales["Make"] == "Toyota"]
Artinya:
Pilih baris
di mana Make sama dengan Toyota
Filtering Berdasarkan Teks
Misalnya terdapat data:
| Make | Colour | Price |
|---|---|---|
| Toyota | White | 4000 |
| Honda | Red | 5000 |
| BMW | Black | 15000 |
| Toyota | Green | 6000 |
Kita dapat mencari semua mobil Toyota:
car_sales[car_sales["Make"] == "Toyota"]
Hasilnya hanya baris yang memenuhi kondisi:
Make == Toyota
Memahami Boolean Condition
Bagian:
car_sales["Make"] == "Toyota"
akan menghasilkan nilai Boolean untuk setiap baris.
Secara sederhana:
Toyota → True
Honda → False
BMW → False
Toyota → True
Pandas kemudian hanya mengambil baris yang memiliki:
True
Sehingga:
car_sales[car_sales["Make"] == "Toyota"]
menghasilkan data Toyota saja.
Operator Perbandingan
Boolean Indexing dapat menggunakan berbagai operator perbandingan.
Beberapa yang umum:
| Operator | Arti |
|---|---|
== | Sama dengan |
!= | Tidak sama dengan |
> | Lebih besar dari |
< | Lebih kecil dari |
>= | Lebih besar atau sama dengan |
<= | Lebih kecil atau sama dengan |
Contoh:
car_sales["Price"] > 5000
Artinya:
Price lebih besar dari 5000
Filtering Berdasarkan Nilai Numerik
Kita juga dapat melakukan filtering menggunakan angka.
Misalnya kita ingin mencari mobil dengan jarak tempuh lebih dari 100.000 km:
car_sales[car_sales["Odometer (KM)"] > 100000]
Artinya:
Ambil baris
yang memiliki Odometer (KM)
lebih besar dari 100000
Contoh Boolean Filtering
Misalnya:
| Make | Odometer (KM) |
|---|---|
| Toyota | 150000 |
| Honda | 80000 |
| BMW | 60000 |
| Nissan | 120000 |
Kondisi:
car_sales["Odometer (KM)"] > 100000
secara konseptual menghasilkan:
150000 → True
80000 → False
60000 → False
120000 → True
Kemudian:
car_sales[car_sales["Odometer (KM)"] > 100000]
hanya mengambil baris dengan nilai True.
Filtering sebagai Konsep Penting
Boolean Indexing sangat penting dalam Data Science karena kita sering perlu menemukan subset data.
Misalnya:
Semua mobil Toyota
↓
Semua mobil dengan harga > 10.000
↓
Semua mobil dengan odometer > 100.000
↓
Semua data dengan kondisi tertentu
Konsep dasarnya:
DataFrame
↓
Condition
↓
True / False
↓
Data yang memenuhi kondisi
Contoh Workflow
Misalnya kita baru membaca dataset:
import pandas as pd
car_sales = pd.read_csv("car-sales.csv")
Pertama, lihat data awal:
car_sales.head()
Kemudian lihat data akhir:
car_sales.tail()
Pilih satu kolom:
car_sales["Make"]
Pilih beberapa kolom:
car_sales[["Make", "Price"]]
Pilih baris berdasarkan index:
car_sales.loc[3]
Pilih baris berdasarkan posisi:
car_sales.iloc[3]
Filter berdasarkan teks:
car_sales[car_sales["Make"] == "Toyota"]
Filter berdasarkan angka:
car_sales[car_sales["Odometer (KM)"] > 100000]
Ringkasan head() dan tail()
head()
↓
Melihat bagian awal DataFrame
tail()
↓
Melihat bagian akhir DataFrame
Contoh:
car_sales.head()
car_sales.head(7)
car_sales.tail()
car_sales.tail(3)
Ringkasan .loc dan .iloc
.loc
↓
Berdasarkan label
.iloc
↓
Berdasarkan posisi
Contoh:
car_sales.loc[3]
berarti:
Ambil label index 3
Sedangkan:
car_sales.iloc[3]
berarti:
Ambil posisi ke-3
Ringkasan Slicing
Dengan .iloc:
car_sales.iloc[:3]
mengambil:
0
1
2
Sedangkan:
car_sales.loc[:3]
mengambil:
0
1
2
3
Perhatikan aturan:
.iloc → stop tidak termasuk
.loc → label stop termasuk
Ringkasan Pemilihan Kolom
Cara yang direkomendasikan:
car_sales["Make"]
Untuk beberapa kolom:
car_sales[["Make", "Price"]]
Dot notation:
car_sales.Make
dapat digunakan untuk nama kolom tertentu, tetapi memiliki keterbatasan.
Karena itu, bracket notation biasanya lebih fleksibel.
Ringkasan Boolean Indexing
Boolean Indexing digunakan untuk melakukan filtering.
Berdasarkan teks:
car_sales[car_sales["Make"] == "Toyota"]
Berdasarkan angka:
car_sales[car_sales["Odometer (KM)"] > 100000]
Konsepnya:
Condition
↓
True / False
↓
Filter
↓
Data yang sesuai
Checklist Pemula
Setelah mempelajari materi ini, pastikan sudah memahami:
- Apa fungsi
head()? - Apa fungsi
tail()? - Bagaimana mengubah jumlah baris yang ditampilkan?
- Apa perbedaan
.locdan.iloc? - Apa yang dimaksud label index?
- Apa yang dimaksud posisi?
- Bagaimana melakukan slicing dengan
.iloc? - Bagaimana melakukan slicing dengan
.loc? - Apa perbedaan aturan slicing
.locdan.iloc? - Bagaimana memilih satu kolom?
- Bagaimana memilih beberapa kolom?
- Apa perbedaan bracket notation dan dot notation?
- Apa itu Boolean Indexing?
- Bagaimana melakukan filtering berdasarkan teks?
- Bagaimana melakukan filtering berdasarkan angka?
Kesimpulan
Pandas menyediakan berbagai cara untuk melihat dan memilih data dari DataFrame.
Untuk melihat sebagian data, gunakan:
car_sales.head()
car_sales.tail()
Untuk memilih data berdasarkan label atau posisi:
car_sales.loc[3]
car_sales.iloc[3]
Untuk memilih kolom:
car_sales["Make"]
atau beberapa kolom:
car_sales[["Make", "Price"]]
Untuk melakukan filtering:
car_sales[car_sales["Make"] == "Toyota"]
atau:
car_sales[car_sales["Odometer (KM)"] > 100000]
Secara keseluruhan:
Viewing
↓
head() / tail()
↓
Selecting
↓
loc / iloc
↓
Column Selection
↓
Boolean Indexing
↓
Filtering
Kemampuan memilih data merupakan dasar yang sangat penting sebelum kita mulai melakukan data cleaning, manipulasi data, dan analisis dataset.