Sebagai seorang backend engineer, ataupun data science, tentunya kita dituntut untuk bisa mengolah sebuah data mentah atau biasa disebut raw data, karena dengan data-data tersebut kita bisa melakukan banyak analisa.
Jika kita bekerja pada sebuah perusahaan, data-data mentah ini biasanya tersimpan dalam Excel .xlsx
dan CSV .csv
.
Pada tutorial kali ini, kita akan belajar tentang bagaimana membaca sebuah data dari Excel menggunakan python.
Apa yang akan kita pelajar?
Tutorial kali ini akan lebih mudah dipahami jika kita telah mengetahui dasar-dasar python seperti dict
dan list
, juga pengetahuan dasar oop (Object Oriented Programming)
➡️ Mengimport data dari Excel ke dalam Database
➡️ Mengeksport data dari Database ke dalam sebuah file Excel
➡️ Menambahkan sebuah data ke dalam file Excel
Lalu bagaimana jika kita melakukannya secara manual atau bahkan rumus excel?
Manual? sepertinya sangat impossible bukan? sedangkan jika kita menggunakan rumus Excel, mungkin bisa juga menjadi bahan pertimbangan jika data-data tersebut hanya berjumlah puluhan atau di bawah 500 row / collumn.
Akan tetapi pada study case kali ini kita akan menggunakan cara seorang engineer, yang mana kita diwajibkan untuk bisa menghandle ratusan bahkan ribuan rows dalam satu file.
Oleh karenanya, kita akan mencoba menggunakan cara tersebut.
Now let’s get into it!
Catatan: pastikan kita telah menginstall latest version python dan telah menyiapkan Virtual Environment untuk project tersebut.
Install openpyxl
melalui terminal:
$ pip install openpyxl
Tunggu hingga proses selesai, dan selanjutnya kita akan membuat sebuah workbook sederhana menggunakan python, buatlah file bernama excel.py
.
$ vim excel.py
Note: Kita bisa menggunakan text editor apapun, contoh di atas ditulis menggunakan VIM
.
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet['A1'] = "noTnoob"
sheet['B1'] = "Dev"
workbook.save(filename="latihan.xlsx")
Lalu jalankan file python excel.py
tersebut, maka dalam folder yang sama, kita akan mendapatkan sebuah file excel baru bernama latihan.xlsx
.
Jika kita buka file excel tersebut, maka di dalamnya akan berisi dua kata, yaitu “notnoob” dan “Dev” pada kolom A
dan B
.
Oh Hell yeah dude, and it’s working!!! 🤘
openpyxl
Setelah percobaan pertama berhasil, langkah selanjutnya adalah membaca sebuah file excel dengan kita siapkan sebelumnya.
Di dalam file exel tersebut terdapat 100 rows.
Langakah selanjutnya adalah, buka terminal / cmd kita. Masuk ke dalam python shell
untuk langsung mengeksekusi file di atas:
❯ python
Python 3.8.2 (default, Apr 27 2020, 15:53:34)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Let’s do it!
>>> from openpyxl import load_workbook
>>> data = load_workbook(filename="100_data_excel.xlsx")
>>> data.sheetnames
['Sheet1']
>>> sheet = data.active
>>> sheet
<Worksheet "Sheet1">
>>> sheet.title
'Sheet1'
>>>
load_workbook
data = load_workbook(filename="100_data_excel.xlsx")
kita memanggil file excel dalam variable data
data.sheetnames
, kita membaca sheet apa sajakah yang ada di dalam file excel yang sebelumnya telah ditampung pada variable data
sheet = data.active
untuk memilih sheet pertama yang ada, dan sheet
akan akan menunjukkan “sheet 1” ketika kita memanggil variable sheet
.Pada tutorial membaca file excel menggunakan python ini, kita akan banyak menggunakan metode seperti di atas untuk membaca sebuah file excel.
Selanjutnya, kita dapat dengan mudah membaca data apa saja yang ada di dalam file excel tersebut menggunakan perintah:
>>> sheet["B1"]
<Cell 'Sheet1'.B1>
>>> sheet["B1"].value
'First Name'
>>> sheet["E5"].value
'United States'
>>>
sheet["B1"].value
yang berisi “First Name”.value
pada baris kode di atas adalah jika kita ingin mendapatkan nilai / data dari kolom yang kita kehendaki. Tanpa .value
kita akan mendapatkan hasil seperti pada baris pertama di atas.Kita juga dapat menggunakan .cell()
untuk mendapatkan index notation.
Contoh:
>>> sheet.cell(row=30, column=4)
<Cell 'Sheet1'.D30>
>>> sheet.cell(row=30, column=4).value
'Male'
openpyxl
Selanjutnya kita akan mencoba melakukan iterasi / iteration / pengulangan pada file excel sebelumnya untuk mendapatkan value yang lebih spesifik.
Menggunakan metode list slicing:
>>> sheet["B3:C4"]
((<Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>), (<Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>))
Pada contoh di atas, melakukan slice
menggunakan list
pada python untuk mendapatkan membaca dimulai dari kolom B row ke 3 hingga kolom C row ke 4.
Kita juga bisa melakukan pengulangan / iterasi / loop or whatever you called it menggunakan:
>>> sheet["A"]
(<Cell 'Sheet1'.A1>,
<Cell 'Sheet1'.A2>,
<Cell 'Sheet1'.A3>,
<Cell 'Sheet1'.A4>,
<Cell 'Sheet1'.A5>,
...
<Cell 'Sheet1'.A98>,
<Cell 'Sheet1'.A99>,
<Cell 'Sheet1'.A100>,
<Cell 'Sheet1'.A101>)
Perintah di atas akan menampilkan semua rows yang ada pada kolom A.
>>> sheet["A:B"]
((<Cell 'Sheet1'.A1>,
<Cell 'Sheet1'.A2>,
...
<Cell 'Sheet1'.A99>,
<Cell 'Sheet1'.A100>),
(<Cell 'Sheet1'.B1>,
<Cell 'Sheet1'.B2>,
...
<Cell 'Sheet1'.B99>,
<Cell 'Sheet1'.B100>))
Perintah di bawah ini akan menampilkan semua rows yang ada pada kolom A dan B.
>>> sheet[3]
(<Cell 'Sheet1'.A3>,
<Cell 'Sheet1'.B3>,
<Cell 'Sheet1'.C3>,
<Cell 'Sheet1'.D3>,
<Cell 'Sheet1'.E3>,
<Cell 'Sheet1'.F3>,
<Cell 'Sheet1'.G3>,
<Cell 'Sheet1'.H3>)
Perintah di atas akan menampilkan semua data pada row ke 3
>>> sheet[3:5]
((<Cell 'Sheet1'.A3>,
<Cell 'Sheet1'.B3>,
<Cell 'Sheet1'.C3>,
<Cell 'Sheet1'.D3>,
...
<Cell 'Sheet1'.F5>,
<Cell 'Sheet1'.G5>,
<Cell 'Sheet1'.H5>))
Baris kode di atas dapat kita gunakan untuk mendapatkan row yang kita inginkan, dimulai dari row ke 3 hingga row ke 5
Jika kita perhatikan kembali, maka pemrosesan data-data di atas melibatkan list
dan tuple
pada python.
Oleh karenanya, memahami penggunaan list
, seperti list slicing dsb, sangatlah dianjurkan agar dapat dengan mudah memahami tutorial ini.
Kita juga dapat menggunakan default python generator untuk mendapatkan data pada file excel seperti:
iter_rows()
iter_cols()
Contoh penggunaa digabungkan dengan loop:
rows
>>> for row in sheet.iter_rows(min_row=1,
max_row=2,
min_col=1,
max_col=3):
print(row)
...
...
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>)
row
menggunakan iter_rows
dan mendapatkan hasil data tuple
yang berisikan row pada setiap element yang kita pilih.
>>> for column in sheet.iter_cols(min_row=1,
max_row=2,
min_col=1,
max_col=3):
... print(column)
...
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>)
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>)
(<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>)
iter_cols
untuk melakukan perulangan pada kolom-kolom excel dan mendapatkan data tuple
yang berisi columns
sesuai yang telah kita pilih.Kita juga dapat menambahkan sebuah argumen boolean yaitu values_only
menjadi True
untuk mendapatkan value
dari file excel tersebut, bukan sebuah object Cell
seperti yang kita gunakan di atas.
Contoh:
>>> for value in sheet.iter_rows(min_row=1,
max_row=2,
min_col=1,
max_col=3,
values_only=True):
... print(value)
...
(0, 'First Name', 'Last Name')
(1, 'Dulce', 'Abril')
Hasil yang kita dapat pun adalah sebuah value dari file excel tersebut, bukan sebuah object seperti sebelumnya.
Agar tutorial ini tidak terlalu panjang, maka kita akan melanjutkan part 2 dari tutorial ini dengan lebih fokus tentang bagaimana cara memanipulasi data excel menggunakan python.