Slicing merupakan teknik memilih data dari sebuah set data. Misal kita memiliki data berat badan mahasiswa: 65, 78, 77, 100, 56. Maka jika kita urutkan maka urutan pertama adalah 65, urutan kedua adalah 78, urutan ketiga adalah 77, urutan keempat adalah 100, dan urutan terakhir adala 56.
Jika didefinisikan ke dalam list, maka akan seperti berikut:
berat_badan=[65,78,77,100,56] berat_badan[1] berat_badan[4] berat_badan[::2]- Jika kita mengeksekusi baris kedua, maka yang keluar adalah 78
- Jika kita mengeksekusi baris ketiga, maka yang keluar adalah 56
- Jika kita mengekseusi baris keempat, maka yang keluar adalah item urutan kedua 65, 77, 56
Pertanyaannya, mengapa berat_badan[1] justru memberi input 78, dan bukan 65? Karena indexing (proses urutan) dalam python dimulai dari nol. Sehingga list berat_badan dimulai dari 0,1,2,3,4
berat_badan[0] berat_badan[:] berat_badan[1:4]- Jika eksekusi baris pertama, maka hasilnya adalah 65, karena index [0] menunjukkan urutan pertama
- Jika eksekusi baris kedua, maka hasilnya semua data dalam list, karena index [:] menunjukkan semua data
- Jika eksekusi baris ketiga, maka hasilnya [78,77,100] karena menunjukkan urutan data kedua sampai keempat.
Perlu diperhatikan bahwa slicing dalam python, urutan terakhir tidak dibaca oleh bahasa python itu sendiri. Maka penulisan [1:4] kita memberikan perintah slicing mulai index 1 sampai index 4 sebagai batas akhir (di mana index 4 ini tidak termasuk ke dalamnya). Sehingga yang dieksekusi adalah index ke 1 sampai 3.
Jika kita eksekusi
berat_badan[:3]Maka yang keluar adalah [65,78,77] karena kita mengindex dari 0 sampai 2 (3 sebagai batasnya, tidak termasuk). Jika kita menulisnya dengan berat_badan[0:3] hasilnya juga akan sama.
Sekarang bagaimana jika kita memiliki list di dalam list?
Bisa langsung dilihat melalui script di bawah ini:
tinggi=[[165,170,171],[200,230,200,198,197],[154,145,148,120]] tinggi[1] tinggi[:3] tinggi[:] tinggi[1][2] tinggi[:][2] tinggi[2][:] tinggi[2][1:3] tinggi[::-1] tinggi[::-2]Masing-masing akan memberikan output:
- Baris kedua [200, 230, 200, 198, 197]
- Baris ketiga [[165, 170, 171], [200, 230, 200, 198, 197], [154, 145, 148, 120]]
- Baris keempat [[165, 170, 171], [200, 230, 200, 198, 197], [154, 145, 148, 120]]
- Baris kelima 200
- Baris keenam [154, 145, 148, 120]
- Baris ketujuh [154, 145, 148, 120]
- Baris kedelapan [145, 148]
- Baris kesembilan [[154, 145, 148, 120], [200, 230, 200, 198, 197], [165, 170, 171]]
- Baris kesepuluh [[154, 145, 148, 120], [165, 170, 171]]
Sekarang, bagaimana jika kita ingin melakukan slicing kolom dalam sebuah tabel?
Semisal kita memiliki tabel seperti ini (bisa didownload di link ini):
Jika demikian, kita tidak bisa menggunakan teknik slicing seperti di atas. Kita harus menggunakan argumen iloc. Syntaxnya kurang lebih seperti ini
nama_variabel.iloc[baris_ke,kolom_ke]Silakan eksekusi lines di bawah ini
import pandas as pd dataset=pd.read_csv('Data.csv') dataset[:] dataset.iloc[1,2] dataset.iloc[:,:] dataset.iloc[1:2,:] dataset.iloc[1:3,1:-1] dataset.iloc[1:3,1:-1].values
- Line ke 3 akan menampilkan semuanya
- Line ke 4 akan menampilkan irisan dari baris ke 1 dan kolom ke 2 (ingat index dimulai dari nol!)
- Line ke 5 juga seperti line ketiga, akan menampilkan semuanya
- Line ke 6 akan menampilkan irisan antara baris ke 1 sampai ke dua (ingat index terakhir tidak termasuk!), dan semua kolom
- Line ke 7 akan menampilkan irisan antara baris ke 1 sampai ke tiga, dan kolom ke 1 sampai terakhir (-1 artinya index terakhir, -2 artinya 1 index sebelum index terakhir)
- Line ke 8 akan menampilkan irisan seperti line ke 7, tanpa mengikut sertakan header kolomnya (values nya saja) dan akan merubahnya menjadi sebuah array (numpy array).
Slicing arrays
Slicing in python means taking elements from one given index to another given index.
We pass slice instead of index like this: [start:end].
We can also define the step, like this: [start:end:step].
If we don't pass start its considered 0
If we don't pass end its considered length of array in that dimension
If we don't pass step its considered 1
Example
Slice elements from index 1 to index 5 from the following array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5])
Try it Yourself »
Note: The result includes the start index, but excludes the end index.
Example
Slice elements from index 4 to the end of the array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[4:])
Try it Yourself »
Example
Slice elements from the beginning to index 4 (not included):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[:4])
Try it Yourself »
Negative Slicing
Use the minus operator to refer to an index from the end:
Example
Slice from the index 3 from the end to index 1 from the end:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[-3:-1])
Try it Yourself »
STEP
Use the step value to determine the step of the slicing:
Example
Return every other element from index 1 to index 5:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5:2])
Try it Yourself »
Example
Return every other element from the entire array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[::2])
Try it Yourself »
Slicing 2-D Arrays
Example
From the second element, slice elements from index 1 to index 4 (not included):
import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[1, 1:4])
Try it Yourself »
Note: Remember that second element has index 1.
Example
From both elements, return index 2:
import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 2])
Try it Yourself »
Example
From both elements, slice index 1 to index 4 (not included), this will return a 2-D array:
import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 1:4])
Try it Yourself »
Test Yourself With Exercises
Exercise:
Insert the correct slicing syntax to print the following selection of the array:
Everything from (including) the second item to (not including) the fifth item.
arr = np.array([10, 15, 20, 25, 30, 35, 40]) print(arr)
Start the Exercise