Pandas versi baru menggunakan antarmuka berikut untuk memuat file Excel:
read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])
tetapi bagaimana jika saya tidak tahu lembar yang tersedia?
Sebagai contoh, saya bekerja dengan file excel lembar berikut
Data 1, Data 2 ..., Data N, foo, bar
tapi saya tidak tahu N
apriori.
Apakah ada cara untuk mendapatkan daftar sheet dari dokumen excel di Pandas?
ExcelFile
? Juga, katakanlah saya mencari daftar lembar dan memutuskan untuk memuat N dari mereka, haruskah saya pada saat itu memanggilread_excel
(antarmuka baru) untuk setiap lembar, atau menempelx1.parse
?{sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}
Anda harus secara eksplisit menentukan parameter kedua (sheetname) sebagai Tidak Ada. seperti ini:
"df" semuanya sheet sebagai kamus DataFrames, Anda dapat memverifikasinya dengan menjalankan ini:
hasil seperti ini:
silakan merujuk panda doc untuk detail lebih lanjut: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
sumber
Ini adalah cara tercepat yang saya temukan, terinspirasi oleh jawaban @ divingTobi. Semua Jawaban berdasarkan xlrd, openpyxl, atau panda lambat bagi saya, karena mereka semua memuat seluruh file terlebih dahulu.
sumber
Membangun jawaban @dhwanil_shah, Anda tidak perlu mengekstrak seluruh file. Dengan
zf.open
itu dimungkinkan untuk membaca dari file zip langsung.Dua berturut-turut
readline
jelek, tetapi konten hanya di baris kedua teks. Tidak perlu menguraikan seluruh file.Solusi ini tampaknya jauh lebih cepat daripada
read_excel
versi, dan kemungkinan besar juga lebih cepat daripada versi ekstrak penuh.sumber
Saya telah mencoba xlrd, panda, openpyxl dan pustaka-pustaka semacam itu dan semuanya sepertinya memerlukan waktu yang eksponensial karena ukuran file bertambah ketika membaca seluruh file. Solusi lain yang disebutkan di atas di mana mereka menggunakan 'on_demand' tidak berfungsi untuk saya. Jika Anda hanya ingin mendapatkan nama sheet pada awalnya, fungsi berikut berfungsi untuk file xlsx.
Karena semua xlsx pada dasarnya adalah file zip, kami mengekstrak data xml yang mendasarinya dan membaca nama lembar dari buku kerja secara langsung yang membutuhkan sepersekian detik dibandingkan dengan fungsi perpustakaan.
Benchmarking: (Pada file xlsx 6mb dengan 4 lembar)
Panda, xlrd: 12 detik
openpyxl: 24 detik
Metode yang diusulkan: 0,4 detik
Karena kebutuhan saya hanya membaca nama lembar, overhead yang tidak perlu dari membaca sepanjang waktu mengganggu saya jadi saya mengambil rute ini sebagai gantinya.
sumber
zipfile
modul bawaan danxmltodict
yang saya gunakan untuk mengubah XML menjadi kamus yang mudah diubah. Meskipun Anda dapat melihat jawaban @ divingTobi di bawah ini di mana Anda dapat membaca file yang sama tanpa benar-benar mengekstraksi file di dalamnya.load_workbook(excel_file).sheetnames
rata-rata 8,24 di manaload_workbook(excel_file, read_only=True).sheetnames
rata-rata 39,6 msUntuk file Excel 5MB saya bekerja dengan,
load_workbook
tanparead_only
bendera mengambil 8,24s. Denganread_only
bendera hanya butuh 39,6 ms. Jika Anda masih ingin menggunakan pustaka Excel dan tidak menjatuhkan ke solusi xml, itu jauh lebih cepat daripada metode yang mem-parsing seluruh file.sumber