He estado leyendo un archivo de datos delimitado por tabulaciones en Windows con Pandas / Python sin ningún problema. El archivo de datos contiene notas en las primeras tres líneas y luego sigue con un encabezado.
df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))
Ahora estoy tratando de leer este archivo con mi Mac. (La primera vez que uso Python en Mac). Recibo el siguiente error.
pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39
Si establezco el argumento error_bad_lines para read_csv en False , obtengo la siguiente información, que continúa hasta el final de la última fila.
Skipping line 8: expected 1 fields, saw 39
Skipping line 9: expected 1 fields, saw 125
Skipping line 10: expected 1 fields, saw 125
Skipping line 11: expected 1 fields, saw 125
Skipping line 12: expected 1 fields, saw 125
Skipping line 13: expected 1 fields, saw 125
Skipping line 14: expected 1 fields, saw 125
Skipping line 15: expected 1 fields, saw 125
Skipping line 16: expected 1 fields, saw 125
Skipping line 17: expected 1 fields, saw 125
...
¿Necesito especificar un valor para el argumento de codificación ? Parece que no debería tener que hacerlo porque leer el archivo funciona bien en Windows.
(0)
y(0,)
en Python? Nota:(0)
is0
y(0,)
is0,
- coma crea una tupla (excepto una vacía), no paréntesis.df = pd.read_table(myfile, skiprows=[0,1,2], header=0)
?Respuestas:
La pista más importante es que todas las filas se devuelven en una línea. Esto indica que los terminadores de línea se están ignorando o no están presentes.
Puede especificar el terminador de línea para csv_reader. Si está en una Mac, las líneas creadas terminarán con en
\r
lugar del estándar de Linux\n
o mejor aún con el enfoque de tirantes y cinturones de Windows\r\n
.pandas.read_csv(filename, sep='\t', lineterminator='\r')
También puede abrir todos sus datos utilizando el paquete de códecs. Esto puede aumentar la robustez a expensas de la velocidad de carga de documentos.
import codecs doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set df = pandas.read_csv(doc, sep='\t')
fuente
Otra opción sería agregar
engine='python'
al comandopandas.read_csv(filename, sep='\t', engine='python')
fuente