es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    # Crear un patrón regex
    pattern = r"(.*\.)\s*$"
    
    # Utilizar str.replace con el patrón regex y el grupo para reemplazar el patrón o devolver una cadena vacía
    comp_df["TITOLARE"] = comp_df["TITOLARE"].str.replace(pattern, r"\1", regex=True).str.replace(r"^\s*$", "", regex=True)
    

    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étodo str.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.

Comments are closed.