Exploser (diviser) les entrées de chaîne DataFrame Pandas dans des lignes séparées
Dans Pandas, une exigence courante consiste à diviser les valeurs séparées par des virgules dans un colonne de chaîne de texte et créez une nouvelle ligne pour chaque entrée. Ceci peut être réalisé par diverses méthodes.
En utilisant Series.explode() ou DataFrame.explode()
Pour les versions Pandas 0.25.0 et supérieures, la série. Les méthodes éclater() et DataFrame.explode() offrent un moyen pratique d'exploser des colonnes de type CSV :
Pour les colonnes simples colonnes :
df.explode('column_name')
Pour plusieurs colonnes :
df.explode(['column1', 'column2']) # Pandas 1.3.0+
Fonction vectorisée générique
Une fonction plus une approche vectorisée polyvalente qui fonctionne à la fois pour les colonnes normales et de liste est fournie ci-dessous :
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
Applications
Colonne CSV :
df['var1'] = df['var1'].str.split(',')
Colonnes de liste multiples :
explode(df, ['num', 'text'], fill_value='')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!