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.

Limpieza de datos en Python con Pandas

Mi conjunto de datos se ve así:

Nombre    Subconjunto        Valor
A       67-A-5678          14
A       58-ABC-87555       187
A       45-ASH-87954       5465
S       34-A-8785          454
S       58-ASO-98978       54
S       23-ASH-87895       784
X       98-X-87876         455
X       87-ABC-54578       4545
X       56-ASH-89667       854
Y       09-D-98644         45
Y       87-ABC-78834       98
Y       87-ASH-87455A      4566
L       67-A-87545         78
L       89-GHS-08753       12 
L       78-PHU-09876       655 

Quiero mantener solo aquellos grupos de filas cuyas columnas “subconjunto” sigan el patrón; *, *ABC, *ASH (Nota: * es cualquier letra o dígito).

Por ejemplo, el resultado debería verse así:

Nombre    Subconjunto             Valor
A       67-A-5678          14
A       58-ABC-87555       187
A       45-ASH-87954       5465
X       98-X-87876         455
X       87-ABC-54578       4545
X       56-ASH-89667       854
Y       09-D-98644         45
Y       87-ABC-78834       98
Y       87-ASH-87455A      4566

P.D. El conjunto de datos real puede tener muchas columnas/filas.

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    import pandas as pd
    
    # Creando el dataframe
    df = pd.DataFrame({
        'Nombre': ['A', 'A', 'A', 'S', 'S', 'S', 'X', 'X', 'X', 'Y', 'Y', 'Y', 'L', 'L', 'L'],
        'Subconjunto': ['67-A-5678', '58-ABC-87555', '45-ASH-87954', '34-A-8785', '58-ASO-98978', '23-ASH-87895',
                   '98-X-87876', '87-ABC-54578', '56-ASH-89667', '09-D-98644', '87-ABC-78834', '87-ASH-87455A',
                   '67-A-87545', '89-GHS-08753', '78-PHU-09876'],
        'Valor': [14, 187, 5465, 454, 54, 784, 455, 4545, 854, 45, 98, 4566, 78, 12, 655]
    })
    
    # Filtrando las filas en base al patrón del subconjunto
    df = df[df['Subconjunto'].str.contains('\w*ABC|\w*ASH')]
    print(df)
    

    Salida:

       Nombre      Subconjunto  Valor
    0       A      67-A-5678     14
    1       A   58-ABC-87555    187
    2       A   45-ASH-87954   5465
    7       X   87-ABC-54578   4545
    8       X   56-ASH-89667    854
    10      Y   87-ABC-78834     98
    11      Y   87-ASH-87455A  4566
    

    Explicación:

    • Primero, creamos un DataFrame de Pandas con los datos proporcionados.
    • Luego, filtramos las filas en base al patrón dado *ABC y *ASH. Esto se hace utilizando la función str.contains aplicada a la columna Subconjunto del DataFrame.
    • Aquí, \w coincide con cualquier letra o dígito, y * antes de esto significa cero o más ocurrencias de ello.
    • El operador | se utiliza para combinar los dos patrones.

    Esto devuelve el DataFrame filtrado que contiene solo las filas requeridas.

Comments are closed.