Maison  >  Article  >  développement back-end  >  Comment puis-je diviser une cellule séparée par des virgules en plusieurs lignes dans un Pandas DataFrame ?

Comment puis-je diviser une cellule séparée par des virgules en plusieurs lignes dans un Pandas DataFrame ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 05:05:03621parcourir

How can I split a comma-separated cell into multiple rows in a Pandas DataFrame?

Diviser une cellule en plusieurs lignes dans une trame de données Pandas

Pandas offre des outils complets pour la manipulation des données, y compris la possibilité de diviser une cellule contenant plusieurs valeurs séparées par des virgules. en plusieurs lignes. Dans ce guide, nous explorerons les méthodes pour y parvenir en utilisant deux approches différentes basées sur la version de pandas.

pandas >= 0.25

Pour les versions de pandas 0.25 et supérieures, vous pouvez utiliser une combinaison de apply, str.split et Series.explode pour obtenir le résultat souhaité. Voici l'extrait de code :

<code class="python">(df.set_index(['order_id', 'order_date'])
   .apply(lambda x: x.str.split(',').explode())
   .reset_index())                                                   </code>

Explication :

  1. set_index(['order_id', 'order_date']) : définit les colonnes order_id et order_date comme index pour les conserver lors des opérations ultérieures.
  2. apply(lambda x: x.str.split(',').explode()) : applique une fonction lambda à chaque ligne. Il divise les valeurs des cellules (package et package_code) sur le délimiteur par virgule et explose les listes résultantes en plusieurs lignes.
  3. reset_index() : réinitialise l'index pour créer un nouveau DataFrame avec les valeurs éclatées sous forme de lignes séparées.

pandas <= 0.24

Pour les versions pandas 0.24 et inférieures, une approche plus complexe impliquant stack, unstack et str.split est nécessaire :

<code class="python">(df.set_index(['order_date', 'order_id'])
   .stack()
   .str.split(',', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)</code>

Explication :

  1. Semblable à l'approche précédente, set_index définit order_date et order_id comme index.
  2. stack() réduit les lignes et les empile comme un colonne unique.
  3. str.split(',', expand=True) divise les valeurs combinées en plusieurs colonnes en fonction du délimiteur virgule.
  4. stack() empile les colonnes pour créer une seule colonne à nouveau.
  5. unstack(-2) dépile le DataFrame à l'avant-dernier niveau pour créer des lignes contenant les valeurs fractionnées.
  6. reset_index(-1, drop=True) supprime le niveau supplémentaire de l'index.
  7. reset_index() ajoute un nouvel index pour créer un nouveau DataFrame.

Les deux méthodes renverront un nouveau DataFrame avec les valeurs éclatées sous forme de lignes séparées, comme illustré dans le résultat souhaité que vous avez fourni.

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