¿Cómo hacer que el separador en pandas read_csv sea más flexible con espacios en blanco?

Necesito crear un dataframe utilizando los datos almacenados en un archivo. Para eso quiero usar el método read_csv . Sin embargo, el separador no es muy regular. Algunas columnas están separadas por tabulaciones ( \t ), otras están separadas por espacios. Además, algunas columnas pueden estar separadas por 2 o 3 o más espacios o incluso por una combinación de espacios y tabulaciones (por ejemplo, 3 espacios, dos tabs y luego 1 espacio).

¿Hay alguna manera de decirle a los pandas que traten estos archivos adecuadamente?

Por cierto, no tengo este problema si uso Python. Yo suelo:

 for line in file(file_name): fld = line.split() 

Y funciona perfecto. No importa si hay 2 o 3 espacios entre los campos. Incluso las combinaciones de espacios y tabs no causan ningún problema. ¿Pueden los pandas hacer lo mismo?

Desde la documentación , puede utilizar una expresión regular o delim_whitespace :

 >>> import pandas as pd >>> for line in open("whitespace.csv"): ... print repr(line) ... 'a\tb\tc 1 2\n' 'd\te\tf 3 4\n' >>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+") 0 1 2 3 4 0 abc 1 2 1 def 3 4 >>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True) 0 1 2 3 4 0 abc 1 2 1 def 3 4 
 >>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+") 

usaría cualquier combinación de cualquier número de espacios y tabs como el separador.

Podemos considerar que esto se ocupa de todas las combinaciones y de cero o más ocurrencias.

 pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*") 

Pandas tiene dos lectores csv, solo es flexible con respecto al espacio en blanco inicial redundante:

 pd.read_csv("whitespace.csv", skipinitialspace=True) 

mientras que uno no es

 pd.DataFrame.from_csv("whitespace.csv") 

Fuera de la caja, ninguno de los dos es flexible con respecto al espacio en blanco al final, vea las respuestas con expresiones regulares. Evite delim_whitespace, ya que también permite solo espacios (sin, o \ t) como separadores.