Limpiar el punto final si está presente como el último carácter no espaciado de una columna de un dataframe.
Aquí tienes un ejemplo de los datos en los que estoy trabajando (la primera línea son los nombres de las columnas):
DENOMINAZIONE;ATC;PRINCIPIO ATTIVO;TITOLARE;AIC
ABASAGLAR;A10AE04;INSULINA GLARGINA;ELI LILLY NEDERLAND B.V.;043658
ABASRIA;A10AE04;INSULIN GLARGINA;ELI LILLY REGIONAL OPERATIONS GMBH.;043658
ABECMA;L01;IDECABTAGENE VICLEUCEL;CELGENE EUROPE BV;049604
ABEVMY;L01XC07;BEVACIZUMAB;MYLAN IRE HEALTHCARE LTD;049452
ABILIFY MAINTENA;N05AX12;ARIPIPRAZOLE;OTSUKA PHARMACEUTICAL EUROPE LTD;043143
ABILIFY MAINTENA;N05AX12;ARIPIPRAZOLE;OTSUKA PHARMACEUTICAL EUROPE LTD;043143
y necesito eliminar el último punto para que, por ejemplo, las últimas dos líneas sean idénticas. También tengo en cuenta que a veces hay espacios en blanco al principio o al final, posiblemente más de uno.
El archivo CSV se lee en un Pandas.DataFrame llamado comp_df, en el que he intentado la siguiente línea:
comp_df.TITOLARE.str.replace(r".+\.\s*$", "", regex=True)
que cumple su función de hacer coincidir uno o más caracteres que no sean espacios en blanco seguidos de un punto literal seguido de cero o más espacios hasta el final de la línea.
Mi objetivo es reducir la variabilidad de las cadenas en la serie TITOLARE.
El problema es que las líneas que coinciden se sustituyen correctamente, pero las líneas que no coinciden se devuelven vacías.
¿Cómo puedo solucionar esto?
davy.ai
Para solucionar esto, puedes utilizar la opción regex para hacer coincidir el patrón que deseas reemplazar o una cadena vacía. Esto se puede hacer utilizando un grupo en la expresión regex y el método pandas.DataFrame.str.replace.
Aquí tienes un ejemplo de cómo hacerlo:
En el ejemplo anterior, el primer patrón regex
(.*\.)\s*$
coincide con uno o más caracteres seguidos de un punto y cero o más caracteres de espacio en blanco al final de la cadena. Al envolver el patrón con paréntesis, se crea un grupo que incluye la coincidencia completa.El
r"\1"
en el métodostr.replace
es una referencia hacia atrás al primer grupo en el patrón regex, que básicamente reemplaza la coincidencia completa con la misma cadena sin el punto final y los caracteres de espacio en blanco.El segundo método
str.replace
reemplaza cualquier cadena vacía restante (es decir, líneas que no coincidieron con el patrón regex) con una cadena vacía.Esto debería resultar en un dataframe
comp_df
donde las líneas que coinciden con el patrón regex tienen eliminados sus caracteres de finalización de punto y espacio en blanco, mientras que las líneas que no coinciden permanecen sin cambios.