import pandas
pandas.__version__ #cek versi'1.0.5'
Kembali ke EDA
Proses download dan install pandas library dapat dilakukan execute baris di bawah ini di local environment’s console masing-masing:
pip install pandas
Jika menggunakan google colab, maka pandas sudah ada sehingga tidak usah menginstall lagi (cukup import). Bila menggunakan anaconda, dapat run baris tersebut di anaconda prompt.
import pandas dan dinamakan sbg ‘pd’ agar lebih mudah dan efisisen
Series : struktur data dasar yang bisa diibaratkan sebagai array satu dimensi yang mempunyai indexDataFrame: struktur data 2 dimensi yang berbentuk tabular (mempunyai baris dan kolom). Kita dapat memikirkan dataframe sebagai kumpulan seriesSeries ObjectSeries merupakan array 1 dimensi yang mempunyai index. Dapat dibuat dari list maupun array seperti berikut:
Output Series mempunyai values di sebelah kanan dan index di sebelah kiri
Seperti pada Numpy, kita dapat melakukan slicing pada index untuk mengeluarkan output value yang diinginkan
Seperti yang dapat dilihat, Series pandas jauh lebih umum dan fleksibel dibandingkan dengan array satu dimensi.
Series as generalized NumPy arrayMembuat series dengan index tertentu. Perhatikan, banyaknya index dan value ditetapkan harus sama jumlahnya.
a 0.25
b 0.50
c 0.75
d 1.00
dtype: float64
Dapat juga digunakan index sembarang/bebas dalam membuat sebuah series.
2 0.25
5 0.50
3 0.75
7 1.00
dtype: float64
Series as specialized dictionariesDictionary adalah koleksi data yang berisi key dan value. Disini, kita akan membuat series dari dictionary.
{'Ayam goreng': 12000,
'Ayam bakar': 12001,
'Ayam hidup': 190000,
'Ayam': 20000,
'Ayam juga': 20000}
Ayam goreng 12000
Ayam bakar 12001
Ayam hidup 190000
Ayam 20000
Ayam juga 20000
dtype: int64
Ayam goreng 12000
Ayam bakar 12001
Ayam hidup 190000
dtype: int64
DataFrame ObjectDataFrame merupakan array dua dimensi yang mempunyai column serta index yang fleksibel. Kedepannya, konsep penggunaan dataframe ini akan banyak digunakan dalam data science & machine learning, terutama dalam data preprocessing/cleaning sebelum melakukan modelling.
[('Ayam goreng', 12000),
('Ayam bakar', 12001),
('Ayam hidup', 190000),
('Ayam', 20000),
('Ayam juga', 20000)]
| Menu | Harga | |
|---|---|---|
| 0 | Ayam goreng | 12000 |
| 1 | Ayam bakar | 12001 |
| 2 | Ayam hidup | 190000 |
| 3 | Ayam | 20000 |
| 4 | Ayam juga | 20000 |
| Menu | Harga | |
|---|---|---|
| 0 | ayam goreng | 17000 |
| 1 | ayam bakar | 15000 |
| 2 | ayam rebus | 10000 |
| nama | biaya | |
|---|---|---|
| 0 | ayam goreng | 17000 |
| 1 | ayam bakar | 15000 |
| 2 | ayam rebus | 10000 |
Pertama-tama akan dilakukan Import melalui pd.read_csv (untuk format csv) atau pd.read_excel
Silakan download file nya: dkikepadatankelurahan2013.csv
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Laki-Laki | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. PANGGANG | 0,91 | 6779 | 231 | 235 | 233 | ... | 98 | 106 | 72 | 65 | 36 | 33 | 33 | 20 | 13 | 27 |
| 1 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. KELAPA | 3,76 | 1705 | 84 | 88 | 99 | ... | 30 | 39 | 29 | 24 | 12 | 21 | 13 | 5 | 5 | 8 |
| 2 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. HARAPAN | 3,59 | 628 | 255 | 238 | 232 | ... | 139 | 101 | 73 | 56 | 18 | 35 | 24 | 25 | 18 | 26 |
| 3 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT | P. UNTUNG JAWA | 0,59 | 3625 | 199 | 185 | 178 | ... | 97 | 83 | 58 | 56 | 40 | 54 | 26 | 27 | 16 | 13 |
| 4 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT | P. TIDUNG | 1,57 | 3084 | 98 | 75 | 73 | ... | 37 | 32 | 22 | 13 | 18 | 15 | 10 | 18 | 11 | 17 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 262 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | MUNJUL | 1,9 | 12734 | 1167 | 1112 | 1026 | ... | 482 | 482 | 302 | 291 | 173 | 137 | 118 | 94 | 52 | 51 |
| 263 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | SETU | 3,25 | 6028 | 937 | 928 | 857 | ... | 392 | 354 | 254 | 211 | 124 | 115 | 64 | 83 | 59 | 64 |
| 264 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | BAMBU APUS | 3,17 | 8400 | 1242 | 1187 | 1062 | ... | 596 | 476 | 377 | 250 | 169 | 179 | 108 | 96 | 70 | 84 |
| 265 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | LUBANG BUAYA | 3,72 | 18055 | 3258 | 2988 | 2732 | ... | 1376 | 1308 | 959 | 739 | 393 | 385 | 293 | 291 | 160 | 165 |
| 266 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | CEGER | 3,63 | 5492 | 1007 | 930 | 874 | ... | 416 | 390 | 279 | 214 | 110 | 153 | 101 | 53 | 45 | 44 |
267 rows × 25 columns
bisa tambahkan parameter sep=“,” atau sep = “;” tergantung delimiter file yang kamu upload
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 267 entries, 0 to 266
Data columns (total 25 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 TAHUN 267 non-null int64
1 NAMA PROVINSI 267 non-null object
2 NAMA KABUPATEN/KOTA 267 non-null object
3 NAMA KECAMATAN 267 non-null object
4 NAMA KELURAHAN 267 non-null object
5 LUAS WILAYAH (KM2) 267 non-null object
6 KEPADATAN (JIWA/KM2) 267 non-null int64
7 35-39 Laki-Laki 267 non-null int64
8 35-39 Perempuan 267 non-null int64
9 40-44 Laki-Laki 267 non-null int64
10 40-44 Perempuan 267 non-null int64
11 45-49 Laki-Laki 267 non-null int64
12 45-49 Perempuan 267 non-null int64
13 50-54 Laki-Laki 267 non-null int64
14 50-54 Perempuan 267 non-null int64
15 55-59 Laki-Laki 267 non-null int64
16 55-59 Perempuan 267 non-null int64
17 60-64 Laki-Laki 267 non-null int64
18 60-64 Perempuan 267 non-null int64
19 65-69 Laki-Laki 267 non-null int64
20 65-69 Perempuan 267 non-null int64
21 70-74 Laki-Laki 267 non-null int64
22 70-74 Perempuan 267 non-null int64
23 >75 Laki-Laki 267 non-null int64
24 >75 Perempuan 267 non-null int64
dtypes: int64(20), object(5)
memory usage: 52.3+ KB
DataFrame.head() -> menampilkan 5 baris pertamaDataFrame.tail() -> menampilkan 5 baris terakhirDataFrame.shape -> jumlah baris kolom danDataFrame.columns -> menampilkan nama kolomDataFrame.index -> menampilkan index barisDataFrame.info(data)-> menampilkan informasi mengenai data| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Laki-Laki | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. PANGGANG | 0,91 | 6779 | 231 | 235 | 233 | ... | 98 | 106 | 72 | 65 | 36 | 33 | 33 | 20 | 13 | 27 |
| 1 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. KELAPA | 3,76 | 1705 | 84 | 88 | 99 | ... | 30 | 39 | 29 | 24 | 12 | 21 | 13 | 5 | 5 | 8 |
| 2 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. HARAPAN | 3,59 | 628 | 255 | 238 | 232 | ... | 139 | 101 | 73 | 56 | 18 | 35 | 24 | 25 | 18 | 26 |
| 3 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT | P. UNTUNG JAWA | 0,59 | 3625 | 199 | 185 | 178 | ... | 97 | 83 | 58 | 56 | 40 | 54 | 26 | 27 | 16 | 13 |
| 4 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT | P. TIDUNG | 1,57 | 3084 | 98 | 75 | 73 | ... | 37 | 32 | 22 | 13 | 18 | 15 | 10 | 18 | 11 | 17 |
5 rows × 25 columns
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Laki-Laki | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 262 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | MUNJUL | 1,9 | 12734 | 1167 | 1112 | 1026 | ... | 482 | 482 | 302 | 291 | 173 | 137 | 118 | 94 | 52 | 51 |
| 263 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | SETU | 3,25 | 6028 | 937 | 928 | 857 | ... | 392 | 354 | 254 | 211 | 124 | 115 | 64 | 83 | 59 | 64 |
| 264 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | BAMBU APUS | 3,17 | 8400 | 1242 | 1187 | 1062 | ... | 596 | 476 | 377 | 250 | 169 | 179 | 108 | 96 | 70 | 84 |
| 265 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | LUBANG BUAYA | 3,72 | 18055 | 3258 | 2988 | 2732 | ... | 1376 | 1308 | 959 | 739 | 393 | 385 | 293 | 291 | 160 | 165 |
| 266 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | CEGER | 3,63 | 5492 | 1007 | 930 | 874 | ... | 416 | 390 | 279 | 214 | 110 | 153 | 101 | 53 | 45 | 44 |
5 rows × 25 columns
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Laki-Laki | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. PANGGANG | 0,91 | 6779 | 231 | 235 | 233 | ... | 98 | 106 | 72 | 65 | 36 | 33 | 33 | 20 | 13 | 27 |
1 rows × 25 columns
Index(['TAHUN', 'NAMA PROVINSI', 'NAMA KABUPATEN/KOTA', 'NAMA KECAMATAN',
'NAMA KELURAHAN', 'LUAS WILAYAH (KM2)', 'KEPADATAN (JIWA/KM2)',
'35-39 Laki-Laki', '35-39 Perempuan', '40-44 Laki-Laki',
'40-44 Perempuan', '45-49 Laki-Laki', '45-49 Perempuan',
'50-54 Laki-Laki', '50-54 Perempuan', '55-59 Laki-Laki',
'55-59 Perempuan', '60-64 Laki-Laki', '60-64 Perempuan',
'65-69 Laki-Laki', '65-69 Perempuan', '70-74 Laki-Laki',
'70-74 Perempuan', '>75 Laki-Laki', '>75 Perempuan'],
dtype='object')
### 2.3. Pandas Index Object
Slicing pada Index object dapat dilakukan dalam bentuk list maupun array.
Int64Index([2, 3, 5, 7, 11], dtype='int64')
Int64Index([2, 5, 11], dtype='int64')
salah satu perbedaan Index object dan array Numpy arrays adalah indices-nya yang immutable. Artinya, indicenya tidak dapat dilakukan modifikasi / update value ke dalamnya.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-36-1d1e0680fdf3> in <module> ----> 1 ind[1] = 0 #akan error F:\kim\anaconda3\lib\site-packages\pandas\core\indexes\base.py in __setitem__(self, key, value) 3908 3909 def __setitem__(self, key, value): -> 3910 raise TypeError("Index does not support mutable operations") 3911 3912 def __getitem__(self, key): TypeError: Index does not support mutable operations
Seriesa 0.25
b 0.50
c 0.75
d 1.00
dtype: float64
a 0.25
b 0.50
c 0.75
d 0.95
dtype: float64
a 0.25
b 0.50
c 0.75
d 0.95
e 1.25
dtype: float64
Melakukan slicing dapat dilakukan dengan dua cara, secara explicit dan implicit (integer index)
Kita dapat menampilkan sekumpulan indices yang telah ditentukan dengan menaruhnya ke dalam sebuah list
Perhatikan, saat melakukan slicing dengan explicit index (misal, data ['a':'c']), final index diikutsertakan dalam outputnya, sementara ketika melakukan slicing dengan implicit index (misal, data[0:2]), final index tidak diikutsertakan dalam outputnya. Ketika slicing melalui list (misal, data [['a', 'e']]), semua indices dari a sampai e akan ditampilkan.
SeriesSecara sederhana, loc : slicing & indexing melalui explicit index. Sedangkan iloc : slicing & indexing melalui implisit index (angka)
a Hello
b DPhir
c world
dtype: object
loc attributeiloc attributeDataFrame| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Laki-Laki | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | P. PANGGANG | 0,91 | 6779 | 231 | 235 | 233 | ... | 98 | 106 | 72 | 65 | 36 | 33 | 33 | 20 | 13 | 27 |
1 rows × 25 columns
0 2013
1 2013
2 2013
3 2013
4 2013
...
262 2013
263 2013
264 2013
265 2013
266 2013
Name: TAHUN, Length: 267, dtype: int64
Output yang sama di atas dapat diperoleh dengan :
0 2013
1 2013
2 2013
3 2013
4 2013
...
262 2013
263 2013
264 2013
265 2013
266 2013
Name: TAHUN, Length: 267, dtype: int64
Bisa juga membuat sebuah kolom baru yang diperoleh dari gabungan dua kolom lain. Misalkan disini ingin digabung jumlah laki2 dan perempuan yang berusia 50-54
DataFrameSama seperti pada series, loc digunakan untuk slicing menggunakan explicit index(nama indexnya langsung) dan iloc menggunakan implicit index (angka/urutan)
yang penting pahami bahwa functionnya itu
df.iloc[baris, kolom]
loc attributeDefinisikan sebuah dataframe baru menggunakan dataset penduduk sebelumnya dengan set ‘NAMA KELUARAHAN’ sebagai index (untuk contoh saja)
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | 40-44 Perempuan | ... | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | gabungan_50-54 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| NAMA KELURAHAN | |||||||||||||||||||||
| P. PANGGANG | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | 0,91 | 6779 | 231 | 235 | 233 | 210 | ... | 106 | 72 | 65 | 36 | 33 | 33 | 20 | 13 | 27 | 263 |
| P. KELAPA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | 3,76 | 1705 | 84 | 88 | 99 | 88 | ... | 39 | 29 | 24 | 12 | 21 | 13 | 5 | 5 | 8 | 63 |
| P. HARAPAN | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | 3,59 | 628 | 255 | 238 | 232 | 234 | ... | 101 | 73 | 56 | 18 | 35 | 24 | 25 | 18 | 26 | 311 |
3 rows × 25 columns
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | |
|---|---|---|---|---|
| NAMA KELURAHAN | ||||
| P. PANGGANG | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. KELAPA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. HARAPAN | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. UNTUNG JAWA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT |
| P. TIDUNG | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT |
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | 40-44 Perempuan | ... | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | gabungan_50-54 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| NAMA KELURAHAN | |||||||||||||||||||||
| P. KELAPA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR | 3,76 | 1705 | 84 | 88 | 99 | 88 | ... | 39 | 29 | 24 | 12 | 21 | 13 | 5 | 5 | 8 | 63 |
1 rows × 25 columns
iloc attribute| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | |
|---|---|---|---|---|
| NAMA KELURAHAN | ||||
| P. PANGGANG | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. KELAPA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. HARAPAN | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU UTR |
| P. UNTUNG JAWA | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT |
| P. TIDUNG | 2013 | PROVINSI DKI JAKARTA | KAB.ADM.KEP.SERIBU | KEP. SERIBU SLT |
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | 40-44 Perempuan | ... | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | gabungan_50-54 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| NAMA KELURAHAN | |||||||||||||||||||||
| CIPINANG BESAR UTARA | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | JATINEGARA | 1,15 | 48850 | 2704 | 2409 | 2344 | 2180 | ... | 1126 | 742 | 765 | 403 | 441 | 307 | 350 | 228 | 247 | 2943 |
1 rows × 25 columns
Dataframecondition = … (disarankan conditionnya dimasukkin ke variabel gini biar ga bingung dalam penulisannya)
df[condition]
ingat bahwa di condition merupakan logical statement dimana harus bernilai TRUE atau FALSE (Boolean)
Memungkinkan kita untuk mengekstrak/filter bagian dari data yang diinginkan. Misal kita ingin menampilkan data yang luas wilayahnya memenuhi 1 (KM2).
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-57-9861136aa52d> in <module> ----> 1 df['LUAS WILAYAH (KM2)']>1 F:\kim\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other) 62 other = item_from_zerodim(other) 63 ---> 64 return method(self, other) 65 66 return new_method F:\kim\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other) 527 rvalues = extract_array(other, extract_numpy=True) 528 --> 529 res_values = comparison_op(lvalues, rvalues, op) 530 531 return _construct_result(self, res_values, index=self.index, name=res_name) F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op) 245 246 elif is_object_dtype(lvalues.dtype): --> 247 res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues) 248 249 else: F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comp_method_OBJECT_ARRAY(op, x, y) 55 result = libops.vec_compare(x.ravel(), y, op) 56 else: ---> 57 result = libops.scalar_compare(x.ravel(), y, op) 58 return result.reshape(x.shape) 59 pandas\_libs\ops.pyx in pandas._libs.ops.scalar_compare() TypeError: '>' not supported between instances of 'str' and 'int'
0 False
1 False
2 False
3 False
4 False
...
262 True
263 False
264 False
265 True
266 False
Name: KEPADATAN (JIWA/KM2), Length: 267, dtype: bool
Diperoleh sebuah series yang berisi boolean value. Jika kita slice data awal dengan boolean value ini, maka akan diperoleh data dengan luas wilayah >1 (yang akan ditampilkan adalah yang True saja)
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | gabungan_50-54 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7 | 2013 | PROVINSI DKI JAKARTA | JAKARTA PUSAT | GAMBIR | CIDENG | 1,26 | 14584 | 850 | 748 | 749 | ... | 537 | 555 | 343 | 413 | 215 | 259 | 142 | 214 | 165 | 1377 |
| 8 | 2013 | PROVINSI DKI JAKARTA | JAKARTA PUSAT | GAMBIR | PETOJO UTARA | 1,12 | 18987 | 954 | 920 | 914 | ... | 510 | 544 | 421 | 398 | 235 | 241 | 132 | 215 | 159 | 1415 |
| 9 | 2013 | PROVINSI DKI JAKARTA | JAKARTA PUSAT | GAMBIR | PETOJO SELATAN | 1,14 | 14465 | 752 | 675 | 691 | ... | 466 | 428 | 279 | 328 | 160 | 215 | 116 | 150 | 121 | 1125 |
| 10 | 2013 | PROVINSI DKI JAKARTA | JAKARTA PUSAT | GAMBIR | KEBON KELAPA | 0,78 | 15890 | 592 | 491 | 447 | ... | 329 | 353 | 263 | 246 | 140 | 152 | 100 | 136 | 72 | 858 |
| 11 | 2013 | PROVINSI DKI JAKARTA | JAKARTA PUSAT | GAMBIR | DURI PULO | 0,72 | 35628 | 1213 | 1106 | 1105 | ... | 616 | 597 | 404 | 409 | 215 | 255 | 156 | 196 | 138 | 1682 |
5 rows × 26 columns
Terlihat yang ditampilkan adalah data2 dengan luas wilayah >1. Bisa juga diberikan 2 kondisi dan gunakan logical operator
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-60-e39817799131> in <module> ----> 1 df[(df['LUAS WILAYAH (KM2)']>1) & (df['KEPADATAN (JIWA/KM2)'] < 1000)] # & (and) artinya dua2nyah harus terpenuhi F:\kim\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other) 62 other = item_from_zerodim(other) 63 ---> 64 return method(self, other) 65 66 return new_method F:\kim\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other) 527 rvalues = extract_array(other, extract_numpy=True) 528 --> 529 res_values = comparison_op(lvalues, rvalues, op) 530 531 return _construct_result(self, res_values, index=self.index, name=res_name) F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op) 245 246 elif is_object_dtype(lvalues.dtype): --> 247 res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues) 248 249 else: F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comp_method_OBJECT_ARRAY(op, x, y) 55 result = libops.vec_compare(x.ravel(), y, op) 56 else: ---> 57 result = libops.scalar_compare(x.ravel(), y, op) 58 return result.reshape(x.shape) 59 pandas\_libs\ops.pyx in pandas._libs.ops.scalar_compare() TypeError: '>' not supported between instances of 'str' and 'int'
Selain operator & dan |, dapat digunakan juga operator ~, yaitu negasi.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-61-d6781c008f8a> in <module> ----> 1 df[~((df['LUAS WILAYAH (KM2)']>1) & (df['LUAS WILAYAH (KM2)']<3))] .head(3) #selain yang di range 1-3 F:\kim\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other) 62 other = item_from_zerodim(other) 63 ---> 64 return method(self, other) 65 66 return new_method F:\kim\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in wrapper(self, other) 527 rvalues = extract_array(other, extract_numpy=True) 528 --> 529 res_values = comparison_op(lvalues, rvalues, op) 530 531 return _construct_result(self, res_values, index=self.index, name=res_name) F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op) 245 246 elif is_object_dtype(lvalues.dtype): --> 247 res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues) 248 249 else: F:\kim\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comp_method_OBJECT_ARRAY(op, x, y) 55 result = libops.vec_compare(x.ravel(), y, op) 56 else: ---> 57 result = libops.scalar_compare(x.ravel(), y, op) 58 return result.reshape(x.shape) 59 pandas\_libs\ops.pyx in pandas._libs.ops.scalar_compare() TypeError: '>' not supported between instances of 'str' and 'int'
| TAHUN | NAMA PROVINSI | NAMA KABUPATEN/KOTA | NAMA KECAMATAN | NAMA KELURAHAN | LUAS WILAYAH (KM2) | KEPADATAN (JIWA/KM2) | 35-39 Laki-Laki | 35-39 Perempuan | 40-44 Laki-Laki | ... | 55-59 Perempuan | 60-64 Laki-Laki | 60-64 Perempuan | 65-69 Laki-Laki | 65-69 Perempuan | 70-74 Laki-Laki | 70-74 Perempuan | >75 Laki-Laki | >75 Perempuan | gabungan_50-54 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 259 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | CIPAYUNG | 3,08 | 8441 | 1241 | 1172 | 1029 | ... | 469 | 374 | 278 | 164 | 177 | 112 | 101 | 61 | 110 | 1398 |
| 260 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | CILANGKAP | 6,03 | 4396 | 1237 | 1276 | 1195 | ... | 397 | 267 | 235 | 161 | 133 | 77 | 90 | 52 | 62 | 1263 |
| 261 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | PONDOK RANGGON | 3,66 | 6772 | 1088 | 1064 | 969 | ... | 391 | 271 | 227 | 131 | 109 | 80 | 105 | 42 | 82 | 1320 |
| 262 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | MUNJUL | 1,9 | 12734 | 1167 | 1112 | 1026 | ... | 482 | 302 | 291 | 173 | 137 | 118 | 94 | 52 | 51 | 1290 |
| 263 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | SETU | 3,25 | 6028 | 937 | 928 | 857 | ... | 354 | 254 | 211 | 124 | 115 | 64 | 83 | 59 | 64 | 983 |
| 264 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | BAMBU APUS | 3,17 | 8400 | 1242 | 1187 | 1062 | ... | 476 | 377 | 250 | 169 | 179 | 108 | 96 | 70 | 84 | 1572 |
| 265 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | LUBANG BUAYA | 3,72 | 18055 | 3258 | 2988 | 2732 | ... | 1308 | 959 | 739 | 393 | 385 | 293 | 291 | 160 | 165 | 3554 |
| 266 | 2013 | PROVINSI DKI JAKARTA | JAKARTA TIMUR | CIPAYUNG | CEGER | 3,63 | 5492 | 1007 | 930 | 874 | ... | 390 | 279 | 214 | 110 | 153 | 101 | 53 | 45 | 44 | 996 |
8 rows × 26 columns