Estoy ejecutando un programa que procesa 30,000 archivos similares. Un número aleatorio de ellos se detiene y produce este error ...
File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
return parser.read()
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid continuation byte
La fuente / creación de estos archivos provienen del mismo lugar. ¿Cuál es la mejor manera de corregir esto para continuar con la importación?
cp1252
podría ser preferibleiso-8859-1
.pd.read_csv('immigration.csv', encoding = "ISO-8859-1", engine='python')
trabajó para míANSI
. Para resolverlo, abrí el csv ynotepad
luego hice clicsave as
, allí muestra la codificación al lado del botón Guardar.La más simple de todas las soluciones:
Solución alternativa
Luego, puede leer su archivo como de costumbre:
y los otros tipos de codificación diferentes son:
fuente
encoding='iso-8859-1'
, en su lugar,engine='python'
lanza_csv.Error: field larger than field limit (131072)
.Pandas permite especificar la codificación, pero no permite ignorar los errores para no reemplazar automáticamente los bytes ofensivos. Por lo tanto, no hay un único tamaño para todos los métodos, sino diferentes formas dependiendo del caso de uso real.
Conoces la codificación y no hay ningún error de codificación en el archivo. Genial: solo tiene que especificar la codificación:
No desea que le molesten las preguntas de codificación, y solo desea que se cargue ese maldito archivo, sin importar si algunos campos de texto contienen basura. Ok, solo tiene que usar la
Latin1
codificación porque acepta cualquier byte posible como entrada (y convertirlo al carácter unicode del mismo código):Usted sabe que la mayor parte del archivo está escrito con una codificación específica, pero también contiene errores de codificación. Un ejemplo del mundo real es un archivo UTF8 que ha sido editado con un editor no utf8 y que contiene algunas líneas con una codificación diferente. Pandas no tiene provisión para un procesamiento de error especial, pero la
open
función Python sí (suponiendo Python3), yread_csv
acepta un archivo como objeto. Los parámetros de error típicos para usar aquí son los'ignore'
que simplemente suprimen los bytes ofensivos o (en mi humilde opinión)'backslashreplace'
que reemplaza los bytes ofensivos por la secuencia de escape con barra invertida de Python:fuente
después de ejecutar este código, encontrará la codificación de 'filename.csv' y luego ejecutará el código de la siguiente manera
ahí tienes
fuente
En mi caso, un archivo tiene
USC-2 LE BOM
codificación, de acuerdo con Notepad ++. Esencoding="utf_16_le"
para python.Espero que ayude a encontrar una respuesta un poco más rápido para alguien.
fuente
En mi caso, esto funcionó para Python 2.7:
Y para python 3, solo:
fuente
Intente especificar el motor = 'python'. Funcionó para mí, pero todavía estoy tratando de entender por qué.
fuente
Estoy publicando una respuesta para proporcionar una solución actualizada y una explicación de por qué puede ocurrir este problema. Supongamos que obtiene estos datos de una base de datos o libro de Excel. Si tiene caracteres especiales como
La Cañada Flintridge city
, bueno, a menos que esté exportando los datos medianteUTF-8
codificación, introducirá errores.La Cañada Flintridge city
se convertiráLa Ca\xf1ada Flintridge city
. Si está utilizandopandas.read_csv
sin ningún ajuste a los parámetros predeterminados, aparecerá el siguiente errorAfortunadamente, hay algunas soluciones.
Opción 1 , arregle la exportación. Asegúrese de usar la
UTF-8
codificación.Opción 2 , si arreglar el problema exportador no está disponible para usted, y que necesita para su uso
pandas.read_csv
, asegúrese de incluir los siguientes parametros,engine='python'
. De manera predeterminada, los pandas usan, loengine='C'
que es ideal para leer archivos grandes y limpios, pero se bloqueará si surge algo inesperado. En mi experiencia, la configuraciónencoding='utf-8'
nunca ha solucionado estoUnicodeDecodeError
. Además, no necesita usarerrors_bad_lines
, sin embargo, todavía es una opción si REALMENTE lo necesita.Opción 3: la solución es mi solución preferida personalmente. Lea el archivo con Vanilla Python.
Espero que esto ayude a las personas que se encuentran con este problema por primera vez.
fuente
Luché con esto por un tiempo y pensé que publicaría sobre esta pregunta, ya que es el primer resultado de búsqueda. Agregar la
encoding="iso-8859-1"
etiqueta a los pandasread_csv
no funcionó, ni ninguna otra codificación, siguió dando un UnicodeDecodeError.Si está pasando un identificador de archivo
pd.read_csv(),
, debe poner elencoding
atributo en el archivo abierto, no enread_csv
. Obvio en retrospectiva, pero un error sutil para rastrear.fuente
Intenta agregar
Esto ayudará. Trabajó para mi. Además, asegúrese de usar el delimitador y los nombres de columna correctos.
Puede comenzar cargando solo 1000 filas para cargar el archivo rápidamente.
fuente
Esta respuesta parece ser el problema para los problemas de codificación CSV. Si tiene un extraño problema de codificación con su encabezado como este:
Entonces tiene un carácter de marca de orden de bytes (BOM) al comienzo de su archivo CSV. Esta respuesta aborda el problema:
Python read csv: lista de materiales incorporada en la primera clave
La solución es cargar el CSV con
encoding="utf-8-sig"
:Esperemos que esto ayude a alguien.
fuente
Estoy publicando una actualización de este viejo hilo. Encontré una solución que funcionó, pero requiere abrir cada archivo. Abrí mi archivo csv en LibreOffice, elegí Guardar como> editar configuración de filtro. En el menú desplegable elegí la codificación UTF8. Luego agregué
encoding="utf-8-sig"
a ladata = pd.read_csv(r'C:\fullpathtofile\filename.csv', sep = ',', encoding="utf-8-sig")
.Espero que esto ayude a alguien.
fuente
Tengo problemas para abrir un archivo CSV en chino simplificado descargado de un banco en línea, lo he intentado
latin1
, lo he intentadoiso-8859-1
, lo he intentadocp1252
, todo fue en vano.Pero
pd.read_csv("",encoding ='gbk')
simplemente hace el trabajo.fuente
Estoy usando Jupyter-notebook. Y en mi caso, estaba mostrando el archivo en el formato incorrecto. La opción 'codificación' no funcionaba. Así que guardo el csv en formato utf-8 y funciona.
fuente
Prueba esto:
Parece que se encargará de la codificación sin expresarla explícitamente a través de argumentos
fuente
Verifique la codificación antes de pasar a los pandas. Te retrasará, pero ...
En python 3.7
fuente
Otro problema importante que enfrenté que resultó en el mismo error fue:
fuente
read_excel
pandas.Puedes probar esto.
fuente