Cómo ignorar completamente los espacios en blanco en csv con Pandas

Estoy tratando de hacer un archivo .csv en un formato que sea mínimamente legible para los humanos y también fácil de leer para los pandas. Eso significa que las columnas deben estar bien separadas para que pueda identificar fácilmente a qué columna pertenece cada valor. El problema es que llenarlo con espacios en blanco tiene algunos recortes en la funcionalidad de los pandas. Hasta ahora lo que tengo es

work ,roughness ,unstab ,corr_c_w ,u_star ,c_star us ,True ,True ,-0.39 ,0.35 ,-.99 wang ,False , ,-0.5 , , cheng , ,True , , , watanabe, , , ,0.15 ,-.80 

Si saco todos los espacios en blanco en el .csv anterior y lo leo directamente con pd.read_csv , funciona perfectamente. Las dos primeras columnas son booleanas y las otras son flotadores. Sin embargo, no es legible para humanos sin los espacios en blanco. Cuando leí el .csv anterior con

 pd.read_csv('bibrev.csv', index_col=0) 

no funciona porque todas las columnas y las cadenas consideradas incluyen, obviamente, los espacios en blanco. Cuando yo uso

 pd.read_csv('bibrev.csv', index_col=0, skipinitialspace=True) 

entonces funciona, porque los flotadores se leen como flotadores y los valores faltantes se leen como NaN s, lo cual es una gran mejora. Sin embargo, los nombres de columna y las columnas booleanas siguen siendo cadenas con espacios en blanco.

¿Algún método para leer ese archivo .csv directamente con pandas? ¿O quizás arriesgar un poco el formato csv y aún tener una lectura limpia con un .csv legible?

PS .: Estoy tratando de evitar leer todo con python como una cadena, reemplazando espacios en blanco y luego alimentarlo a los pandas y también tratando de evitar definir algunas funciones y pasarlo a los pandas a través de la palabra clave converters .

prueba esto:

 import pandas as pd def booleator(col): if str(col).lower() in ['true', 'yes']: return True #elif str(col).lower() == "false": # return False else: return False df = pd.read_csv('data.csv', sep='\s*,\s*', index_col=0, converters={'roughness': booleator, 'unstab': booleator}, engine='python') print(df) print(df.dtypes) 

Salida:

  roughness unstab corr_c_w u_star c_star work us True True -0.39 0.35 -0.99 wang False False -0.50 NaN NaN cheng False True NaN NaN NaN watanabe False False NaN 0.15 -0.80 roughness bool unstab bool corr_c_w float64 u_star float64 c_star float64 dtype: object 

Esta versión también se ocupa de los booleanos: todos los NaN se convertirán a Falso, de lo contrario, Pandas promoverá el tipo de objeto (ver detalles en mi comentario) …