Menggunakan paket openpyxl untuk mengabaikan baris dan kolom tersembunyi saat membaca file Excel sebagai Pandas DataFrames
Foto oleh Mika Baumeister di Unsplash
Saya mempelajari sesuatu yang baru baru-baru ini — bahwa mungkin untuk mengecualikan baris dan/atau kolom tersembunyi saat membaca file Excel sebagai Pandas DataFrames, semuanya berkat paket openpyxl, dan saya ingin membaginya dengan Anda
Tidak jarang baris atau kolom file Excel disembunyikan. Kolom yang kurang relevan mungkin disembunyikan untuk membuat spreadsheet lebih rapi;
Apa pun alasannya, menyembunyikannya saat memuat file sebagai Pandas DataFrame mungkin bermanfaat, karena dapat memengaruhi perselisihan dan eksplorasi data selanjutnya
Sayangnya, cara tradisional membaca file Excel sebagai Pandas DataFrames — menggunakan metode pandas.read_excel() — tidak memfasilitasi itu
Dalam posting ini, kami akan mengeksplorasi bagaimana kami dapat mengidentifikasi baris dan kolom tersembunyi dari file Excel menggunakan paket openpyxl dan karenanya mengecualikannya saat memuatnya sebagai Pandas DataFrame
Kumpulan dataKami akan menggunakan sebagian kecil dari kumpulan data pelatihan titanic yang tersedia untuk umum di Kaggle. Untuk kesederhanaan, saya membatasi jumlah baris data menjadi 20. Saya juga sengaja menyembunyikan Kolom F ("Umur"), I ("Tiket") dan K ("Kabin"), serta Baris 6, 11, 16, dan 21
Pratinjau kumpulan data di Excel (Gambar oleh Penulis)Mengapa `pandas. read_excel()` tidak berfungsi?
Biasanya, kami menggunakan metode >>> pip install openpyxl_1 Pandas untuk memuat dataset di Excel sebagai Pandas DataFrame. Mari kita lihat apa yang terjadi ketika kita melakukan itu untuk kumpulan data titanic kita yang berisi baris dan kolom tersembunyi
>>> import pandas as pd>>> df = pd.read_excel("data/titanic.xlsx")>>> df_Dataset sebagai Pandas DataFrame dengan semua baris dan kolom (Gambar oleh Penulis)
Secara default, metode >>> pip install openpyxl_1 membaca data dari semua baris dan kolom dari file Excel yang ditentukan. Dengan kata lain, itu tidak mengecualikan baris dan kolom yang tersembunyi
Instalasi openpyxlUntuk memuat sebagai Pandas DataFrames tanpa baris dan kolom tersembunyi, kita dapat menggunakan paket openpyxl, pustaka Python untuk "membaca/menulis file xlsx/xlsm/xltx/xltm Excel 2010"
Karena openpyxl bukan pustaka bawaan Python standar, Anda harus menginstalnya terlebih dahulu. Buka jendela baris perintah dan ketik perintah berikut
>>> pip install openpyxlMemuat file Excel dan lembar kerja menggunakan openpyxlUntuk membuka file Excel yang ada menggunakan paket openpyxl, kami menggunakan metode >>> pip install openpyxl4, dengan menentukan nama jalur tempat file Excel disimpan
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")
Ini membuat objek >>> pip install openpyxl5 yang, menurut dokumentasi, adalah "wadah tingkat atas untuk semua informasi dokumen". Objek ini berisi banyak atribut yang berkaitan dengan file input, termasuk atribut >>> pip install openpyxl6 yang mengembalikan daftar nama semua lembar kerja di buku kerja
# Create a list of names of all worksheets in `workbook`>>> sheet_names = workbook.sheetnames# Create a `Worksheet` object
>>> worksheet = workbook[sheet_names[0]]_
Dalam file >>> pip install openpyxl_7 kami, kami hanya memiliki satu lembar kerja bernama "train", jadi kami mendapatkan nama sheet dengan mengambil elemen pertama dari daftar >>> pip install openpyxl8. Selanjutnya, kita membuat objek >>> pip install openpyxl_9 dari objek >>> pip install openpyxl5
Menemukan indeks baris tersembunyiDemikian pula, objek >>> pip install openpyxl_9 berisi atribut yang berkaitan dengan lembar kerja yang ditentukan. Untuk menemukan indeks dari semua baris tersembunyi, kami menggunakan atribut >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")2 dari objek >>> pip install openpyxl9, seperti ini
>>> hidden_rows_idx = [
row - 2
for row, dimension in worksheet.row_dimensions.items()
if dimension.hidden
]>>> print(hidden_rows_idx)[4, 9, 14, 19]
Perhatikan bahwa kita perlu mengambil >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")_4 alih-alih hanya >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")5 karena kita ingin menemukan indeks yang sesuai dengan Pandas DataFrame, bukan file Excel
Untuk menemukan nama semua kolom tersembunyi, pertama-tama kita menggunakan atribut >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")6 dari objek >>> pip install openpyxl9
>>> hidden_cols = [
col
for col, dimension in worksheet.column_dimensions.items()
if dimension.hidden
]>>> print(hidden_cols)['F', 'I', 'K']
Ini menghasilkan daftar yang terdiri dari huruf besar yang sesuai dengan kolom tersembunyi dari lembar kerja Excel. Jadi, kita perlu mengonversi daftar >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")8 menjadi daftar nama kolom tersembunyi. Untuk melakukannya, kami menggunakan pustaka bawaan Python, >>> import openpyxl# Open an Excel workbook
>>> workbook = openpyxl.load_workbook("data/titanic.xlsx")9, dan atribut # Create a list of names of all worksheets in `workbook`
>>> sheet_names = workbook.sheetnames# Create a `Worksheet` object
>>> worksheet = workbook[sheet_names[0]]0
>>> hidden_cols_idx = [
string.ascii_uppercase.index(col_name)
for col_name in hidden_cols
]# Find names of columns corresponding to hidden column indices
>>> hidden_cols_name = df.columns[hidden_cols_idx].tolist()>>> print(hidden_cols_name)['Age', 'Ticket', 'Cabin']
Penafian. Perhatikan bahwa menggunakan # Create a list of names of all worksheets in `workbook`
>>> sheet_names = workbook.sheetnames# Create a `Worksheet` object
>>> worksheet = workbook[sheet_names[0]]_1 mengasumsikan bahwa paling banyak ada 26 kolom. Jika ada lebih dari 26 kolom, kode perlu diubah
Terakhir, setelah kita memiliki indeks untuk baris tersembunyi dan nama untuk kolom tersembunyi, sisanya sederhana. Untuk mengecualikan baris dan kolom tersembunyi tersebut, kami cukup menggunakan metode # Create a list of names of all worksheets in `workbook`
>>> sheet_names = workbook.sheetnames# Create a `Worksheet` object
>>> worksheet = workbook[sheet_names[0]]2 Pandas
>>> df.drop(hidden_cols_name, axis=1, inplace=True)# Drop the hidden rows
>>> df.drop(hidden_rows_idx, axis=0, inplace=True)# Reset the index
>>> df.reset_index(drop=True, inplace=True)>>> df
Dataset sebagai Pandas DataFrame tanpa baris dan kolom tersembunyi (Gambar oleh Penulis) Menyatukan semuanya
Berikut cuplikan kode yang menyatukan kode-kode di atas dengan beberapa pemfaktoran ulang sederhana
MembungkusnyaJadi, begitulah — kode Python yang memungkinkan Anda membaca file Excel yang berisi baris dan/atau kolom tersembunyi sebagaimana adanya, seperti Pandas DataFrames
Kasus penggunaan khusus ini hanya menggores permukaan dari apa yang ditawarkan paket openpyxl. Untuk informasi lebih lanjut tentang paket openpyxl, lihat dokumentasinya di sini
Kode yang ditampilkan di postingan ini juga dapat ditemukan sebagai notebook di repo GitHub ini
Halo. Saya Zeya. Terima kasih telah membaca postingan ini. Jika Anda merasa ini berguna, beri tahu saya di komentar. Saya juga menerima diskusi, pertanyaan, dan umpan balik yang konstruktif. Jangan ragu untuk mengikuti saya di Medium atau hubungi saya melalui LinkedIn atau Twitter. Semoga hari mu menyenangkan