Intentando leer el archivo MS Excel, versión 2016. El archivo contiene varias listas con datos. Archivo descargado de DataBase y se puede abrir en MS Office correctamente. En el siguiente ejemplo, cambié el nombre del archivo.
EDITAR: el archivo contiene palabras en ruso e inglés. Lo más probable es que haya usado la codificación Latin-1, pero encoding='latin-1' no ayuda
import pandas as pd with open('1.xlsx', 'r', encoding='utf8') as f: data = pd.read_excel(f)Resultado:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 14: invalid start byte Sin encoding ='utf8'
'charmap' codec can't decode byte 0x9d in position 622: character maps to <undefined>PS Task es procesar 52 archivos, fusionar datos en cada hoja con las hojas correspondientes en los 52 archivos. Por lo tanto, no manipule los consejos de trabajo.
El problema es que el solicitante original está llamando a read_excel con un identificador de archivo como primer argumento. Como lo demostró el último en responder, el primer argumento debe ser una cadena que contenga el nombre del archivo.
Me encontré con este mismo error usando:
df = pd.read_excel(open("file.xlsx",'r'))
pero correcto es:
df = pd.read_excel("file.xlsx")
Lo más probable es que estés usando Python3. En Python2 esto no sucedería.
Los archivos xlsx son binarios (en realidad son un xml, pero están comprimidos), por lo que debe abrirlos en modo binario. Use esta llamada para abrir:
open('1.xlsx', 'rb')No hay un seguimiento completo, pero imagino que UnicodeDecodeError proviene del objeto del archivo, no de read_excel(). Eso sucede porque el flujo de bytes puede contener cualquier cosa, pero no queremos que la decodificación ocurra demasiado pronto; read_excel() debe recibir bytes sin procesar y poder procesarlos.
Lo más probable es que el problema esté en los símbolos rusos.
Charmap es el método de decodificación predeterminado que se utiliza en caso de que no se detecte ninguna codificación.
Como veo, si utf-8 y latin-1 no ayudan, intente leer este archivo no como
pd.read_excel(f)pero
pd.read_table(f)o incluso simplemente
f.readline()para verificar qué es un símbolo, genere una excepción y elimine este símbolo/símbolos.