Basta ya de indagar en otros sitios ya que llegaste al sitio adecuado, tenemos la solución que buscas y sin liarte.
Solución:
Como han sugerido otros, la lectura de csv es más rápida. Entonces, si está en Windows y tiene Excel, puede llamar a un vbscript para convertir Excel a csv y luego leer el csv. Probé el siguiente script y tardé unos 30 segundos.
# create a list with sheet numbers you want to process
sheets = map(str,range(1,6))
# convert each sheet to csv and then read it using read_csv
df=
from subprocess import call
excel='C:\Users\rsignell\OTT_Data_All_stations.xlsx'
for sheet in sheets:
csv = 'C:\Users\rsignell\test' + sheet + '.csv'
call(['cscript.exe', 'C:\Users\rsignell\ExcelToCsv.vbs', excel, csv, sheet])
df[sheet]=pd.read_csv(csv)
Aquí hay un pequeño fragmento de python para crear el script ExcelToCsv.vbs:
#write vbscript to file
vbscript="""if WScript.Arguments.Count < 3 Then
WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv "
Wscript.Quit
End If
csv_format = 6
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
worksheet_number = CInt(WScript.Arguments.Item(2))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.Worksheets(worksheet_number).Activate
oBook.SaveAs dest_file, csv_format
oBook.Close False
oExcel.Quit
""";
f = open('ExcelToCsv.vbs','w')
f.write(vbscript.encode('utf-8'))
f.close()
Esta respuesta se benefició de Convertir XLS a CSV en la línea de comando y la importación de archivos csv y xlsx al marco de datos de pandas: problema de velocidad
Si tiene menos de 65536 filas (en cada hoja), puede intentar xls
(en vez de xlsx
. En mi experiencia xls
es más rápido que xlsx
. Es difícil comparar con csv
porque depende de la cantidad de hojas.
Aunque esta no es una solución ideal (xls
es un formato privativo antiguo binario), he encontrado que esto es útil si está trabajando con muchas hojas, fórmulas internas con valores que se actualizan a menudo, o por cualquier razón que realmente le gustaría mantener la funcionalidad de hojas múltiples de Excel (en lugar de archivos separados csv).
Sé que esto es antiguo, pero en caso de que alguien más esté buscando una respuesta que no involucre a VB. pandas read_csv()
es más rápido pero no necesita un script VB para obtener un archivo csv.
Abra su archivo de Excel y guárdelo en formato *.csv (valores separados por comas).
En herramientas, puede seleccionar Opciones web y, en la pestaña Codificación, puede cambiar la codificación a lo que funcione para sus datos. Terminé usando Windows, Europa occidental porque la codificación UTF de Windows es “especial”, pero hay muchas maneras de lograr lo mismo. Luego use el argumento de codificación en pd.read_csv()
para especificar su codificación.
Las opciones de codificación se enumeran aquí