"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo explotar (dividir) las entradas de cadena del DataFrame de Pandas en filas separadas?

¿Cómo explotar (dividir) las entradas de cadena del DataFrame de Pandas en filas separadas?

Publicado el 2024-12-25
Navegar:455

How to Explode (Split) Pandas DataFrame String Entries into Separate Rows?

Explotar (dividir) entradas de cadenas del marco de datos de Pandas en filas separadas

En Pandas, un requisito común es dividir valores separados por comas en un columna de cadena de texto y cree una nueva fila para cada entrada. Esto se puede lograr a través de varios métodos.

Usando Series.explode() o DataFrame.explode()

Para las versiones 0.25.0 y superiores de Pandas, la serie. Los métodos explode() y DataFrame.explode() proporcionan una manera conveniente de explotar columnas tipo CSV:

Para columnas individuales columnas:

df.explode('column_name')

Para varias columnas:

df.explode(['column1', 'column2'])  # Pandas 1.3.0 

Vectorizado genérico Función

A continuación se proporciona un enfoque vectorizado más versátil que funciona tanto para columnas normales como para columnas de lista:

def explode(df, lst_cols, fill_value='', preserve_index=False):
    # Convert CSV string columns to list columns
    for col in lst_cols:
        df[col] = df[col].str.split(',')

    # Extract all non-list columns
    idx_cols = df.columns.difference(lst_cols)

    # Calculate list lengths
    lens = df[lst_cols[0]].str.len()

    # Create exploded DataFrame
    result = (pd.DataFrame({
        col: np.repeat(df[col].values, lens)
        for col in idx_cols
    }, index=np.repeat(df.index.values, lens))
        .assign(**{col: np.concatenate(df.loc[lens>0, col].values)
                    for col in lst_cols}))

    # Handle empty list rows
    if (lens == 0).any():
        result = result.append(df.loc[lens==0, idx_cols], sort=False).fillna(fill_value)

    # Revert index order and reset index if requested
    result = result.sort_index()
    if not preserve_index:
        result = result.reset_index(drop=True)

    return result

Aplicaciones

Columna CSV:

df['var1'] = df['var1'].str.split(',')

Lista múltiple Columnas:

explode(df, ['num', 'text'], fill_value='')
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3