pandas.parser.CParserError: Error al tokenizar datos
Estoy intentando usar pandas para manipular un archivo .csv pero aparece este error:
pandas.parser.CParserError: Error al tokenizar datos. Error de C: se esperaban 2 campos en la línea 3, vi 12
Intenté leer los documentos de pandas, pero no encontré nada.
Mi código es simple:
path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)
¿Cómo puedo resolver esto? ¿Debo usar el csv
módulo u otro idioma?
también puedes intentarlo;
data = pd.read_csv('file1.csv', on_bad_lines='skip')
Tenga en cuenta que esto hará que se omitan las líneas ofensivas. Si no esperas muchas líneas malas y quieres (al menos) saber su cantidad e ID, usa on_bad_lines='warn'
. Para un manejo avanzado de males, puede pasar un invocable.
Editar
Para Pandas < 1.3.0 prueba
data = pd.read_csv("file1.csv", error_bad_lines=False)
según la referencia de la API de pandas .
Podría ser un problema con
- los delimitadores en tus datos
- la primera fila, como señaló @TomAugspurger
Para resolverlo, intente especificar los argumentos sep
y/o header
al llamar read_csv
. Por ejemplo,
df = pandas.read_csv(filepath, sep='delimiter', header=None)
En el código anterior, sep
define su delimitador y header=None
le dice a pandas que sus datos de origen no tienen fila para encabezados/títulos de columna. Así dicen los documentos : "Si el archivo no contiene una fila de encabezado, entonces debe pasar explícitamente encabezado = Ninguno". En este caso, pandas crea automáticamente índices de números enteros para cada campo {0,1,2,...}.
Según los documentos, lo del delimitador no debería ser un problema. Los documentos dicen que "si sep es Ninguno [no especificado], intentará determinar esto automáticamente". Sin embargo, no he tenido buena suerte con esto, incluidas instancias con delimitadores obvios.
Otra solución puede ser intentar detectar automáticamente el delimitador.
# use the first 2 lines of the file to detect separator
temp_lines = csv_file.readline() + '\n' + csv_file.readline()
dialect = csv.Sniffer().sniff(temp_lines, delimiters=';,')
# remember to go back to the start of the file for the next time it's read
csv_file.seek(0)
df = pd.read_csv(csv_file, sep=dialect.delimiter)
Este es definitivamente un problema de delimitador, ya que la mayoría de los CSV CSV se crean usando, sep='/t'
así que intente read_csv
usar el carácter de tabulación (\t)
usando el separador /t
. entonces, intente abrir usando la siguiente línea de código.
data=pd.read_csv("File_path", sep='\t')
El analizador se confunde con el encabezado del archivo. Lee la primera fila e infiere el número de columnas de esa fila. Pero las dos primeras filas no son representativas de los datos reales del archivo.
Pruébalo condata = pd.read_csv(path, skiprows=2)
Tuve este problema, intentaba leer en un CSV sin pasar los nombres de las columnas.
df = pd.read_csv(filename, header=None)
Especificé los nombres de las columnas en una lista de antemano y luego los pasé names
y lo resolvió de inmediato. Si no ha establecido nombres de columnas, puede crear tantos nombres de marcadores de posición como el número máximo de columnas que puedan haber en sus datos.
col_names = ["col1", "col2", "col3", ...]
df = pd.read_csv(filename, names=col_names)