No estoy seguro de por qué recibo este error, ¡aunque a veces mi código funciona bien!
Excel file format cannot be determined, you must specify an engine manually.
Aquí debajo está mi código con los pasos:
1- lista de columnas de identificación de clientes:
customer_id = ["ID","customer_id","consumer_number","cus_id","client_ID"]2- El código para encontrar todos los archivos xlsx en una carpeta y leerlos:
l = [] #use a list and concat later, faster than append in the loop for f in glob.glob("./*.xlsx"): df = pd.read_excel(f).reindex(columns=customer_id).dropna(how='all', axis=1) df.columns = ["ID"] # to have only one column once concat l.append(df) all_data = pd.concat(l, ignore_index=True) # concat all data Agregué el motor openpyxl
df = pd.read_excel(f, engine="openpyxl").reindex(columns = customer_id).dropna(how='all', axis=1)
Ahora tengo un error diferente:
BadZipFile: File is not a zip fileversión de pandas: 1.3.0 versión de python: python3.9 sistema operativo: MacOS
¿Hay una mejor manera de leer todos los archivos xlsx de una carpeta?
Lo encontré. Cuando MS Excel abre un archivo de Excel, por ejemplo, se crea un archivo temporal oculto en el mismo directorio:
~$datasheet.xlsxEntonces, cuando ejecuto el código para leer todos los archivos de la carpeta, me da el error:
Excel file format cannot be determined, you must specify an engine manually. Cuando todos los archivos están cerrados y no hay archivos temporales ocultos ~$filename.xlsx en el mismo directorio, el código funciona perfectamente.
También recibí un error de 'Formato de archivo de Excel...' cuando cambié manualmente el sufijo 'CSV' a 'XLS'. Todo lo que tenía que hacer era abrir Excel y guardarlo en el formato que quería.
También asegúrese de estar usando el método pd.read_* correcto. Me encontré con este error al intentar abrir un archivo .csv con read_excel() en lugar de read_csv() . Encontré este práctico fragmento aquí para seleccionar automáticamente el método correcto por tipo de archivo de Excel.
if file_extension == 'xlsx': df = pd.read_excel(file.read(), engine='openpyxl') elif file_extension == 'xls': df = pd.read_excel(file.read()) elif file_extension == 'csv': df = pd.read_csv(file.read())Parece una solución fácil para este. Vaya a su archivo de Excel, ya sea xls o xlsx o cualquier otra extensión, y haga "guardar como" desde el ícono del archivo. Cuando se le solicite con opciones. Guárdelo como CSV UTF-8 (delimitado por comas) (*.csv)
https://stackoverflow.com/a/32241271/17411729
enlace a una respuesta sobre cómo eliminar archivos ocultos
Mac = ir a la carpeta, presione cmd + shift + . mostrará el archivo oculto, lo eliminará, lo ejecutará de nuevo.
En macOS, se genera automáticamente un "archivo invisible" llamado ".DS_Store" en cada carpeta. Para mí, esta fue la fuente del problema. Resolví el problema con una declaración if para omitir el "archivo invisible" (que no es un xlsx, por lo que desencadenaría el error)
for file in os.scandir(test_folder): filename = os.fsdecode(file) if '.DS_Store' not in filename: execute_function(file)En mi caso, usé xlrd . Así que en la terminal:
pip install xlrdSi pandas no está instalado, instálelo:
pip install pandasAhora lea el archivo de Excel de esta manera:
import pandas as pd df = pd.read_excel("filesFolder/excelFile.xls", engine='xlrd')