Maison >développement back-end >Tutoriel Python >Comment exploser efficacement les colonnes de type liste dans les DataFrames Pandas ?

Comment exploser efficacement les colonnes de type liste dans les DataFrames Pandas ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 15:44:11951parcourir

How to Effectively Explode List-Like Columns in Pandas DataFrames?

Explosion de colonnes de type liste : guide pour étendre les cadres de données

Problème :

Dans Dataframes Pandas, certaines cellules peuvent contenir des listes de plusieurs valeurs. Le but est de transformer le dataframe pour que chaque élément de la liste occupe une ligne distincte, tout en préservant les valeurs dans les autres colonnes.

Solution :

Méthode 1 : répéter()

Avant Pandas 0.25, la méthode répéter() était couramment utilisée pour exploser la liste colonnes :

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'trial_num': [1, 2, 3, 1, 2, 3],
     'subject': [1, 1, 1, 2, 2, 2],
     'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
    }
)

# Expand 'samples' column into separate rows using repeat()
df_exploded = df.assign(
    samples=df['samples'].str.join(',').str.split(',')
).explode('samples')

df_exploded = df_exploded.reset_index(drop=True)

# Add sample_num column to track list element order
df_exploded['sample_num'] = df_exploded.groupby('trial_num').cumcount()

Méthode 2 : exploser() (Pandas >= 0.25)

Avec la sortie de Pandas 0.25, la méthode .explode() fournit une solution élégante :

df.explode('samples').reset_index(drop=True)

Cette méthode gère automatiquement les listes vides et préserve les NaN, garantissant une conversion complète.

Remarque :

  • La méthode basée sur la répétition peut gérer l'explosion de colonnes de chaînes, mais nécessite d'abord de les diviser sur un séparateur.
  • La méthode éclater() explose une seule colonne à la fois.
  • Les trames de données éclatées peuvent nécessiter un traitement supplémentaire pour établir une image unique. indexer et renuméroter les éléments de la liste.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn