¿Pandas de inconsistencia con expresiones regulares “.” Dot metacharacter?

Considerar

df Cost Store 1 22.5 Store 1 ......... Store 2 ... 

Para convertir estos puntos a nan, puedo usar:

 df.replace('^\.+$', np.nan, regex=True) Cost Store 1 22.5 Store 1 NaN Store 2 NaN 

Lo que no entiendo es por qué el siguiente patrón también funciona:

 df.replace('^.+$', np.nan, regex=True) Cost Store 1 22.5 Store 1 NaN Store 2 NaN 

Tenga en cuenta que, en este caso, no he escapado de la . , por lo tanto, debe tratarse como un carácter coincidente, lo que hace que cada fila se convierta en NaN … pero no lo es … solo las filas .... coinciden … aunque utilicé el matchall personaje.

Contraste esto con:

 import re re.sub('^.+$', '', '22.5') '' 

Lo que devuelve una cadena vacía.

Entonces, ¿qué está pasando?

A mitad de escribir esta pregunta, me di cuenta de cuál era el problema:

 df.Cost.dtype dtype('O') df.Cost.values array([22.5, '.........', '...'], dtype=object) 

Entonces, el 22.5 es un valor numérico, y el patrón de expresiones regulares simplemente salta los valores que no son de cadena cuando se intenta reemplazar. Hacer una conversión astype hace obvio:

 df.astype(str).replace('.+', np.nan, regex=True) Cost Store 1 NaN Store 1 NaN Store 2 NaN 

Problema resuelto. Dejando esto en caso de que alguien más esté confundido por esto.