Reemplazo de valores en blanco (espacio en blanco) con NaN en pandas
Quiero encontrar todos los valores en un marco de datos de Pandas que contengan espacios en blanco (cualquier cantidad arbitraria) y reemplazar esos valores con NaN.
¿Alguna idea de cómo se puede mejorar esto?
Básicamente quiero convertir esto:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
Dentro de esto:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
Me las arreglé para hacerlo con el código de abajo, pero el hombre es feo. No es Pythonic y estoy seguro de que tampoco es el uso más eficiente de los pandas. Recorrí cada columna y realicé un reemplazo booleano contra una máscara de columna generada al aplicar una función que realiza una búsqueda de expresiones regulares de cada valor, coincidiendo con espacios en blanco.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*Podría optimizarse un poco iterando solo a través de campos que podrían contener cadenas vacías:
if df[i].dtype == np.dtype('object')
Pero eso no es una gran mejora.
Y, finalmente, este código establece las cadenas de destino en Ninguna, que funciona con las funciones de Pandas comofillna()
, pero sería bueno para completar si realmente pudiera insertar unNaN
directamente en lugar deNone
.
, str(i)) else False)]=None
Podría optimizarse un poco iterando solo a través de campos que podrían contener cadenas vacías:
if df[i].dtype == np.dtype('object')
Pero eso no es una gran mejora.
Y, finalmente, este código establece las cadenas de destino en Ninguna, que funciona con las funciones de Pandas comofillna()
, pero sería bueno para completar si realmente pudiera insertar unNaN
directamente en lugar deNone
.