Maison  >  Article  >  développement back-end  >  Quelle méthode Pandas est plus performante pour le remplacement de valeurs basé sur un dictionnaire en série ?

Quelle méthode Pandas est plus performante pour le remplacement de valeurs basé sur un dictionnaire en série ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 20:01:02905parcourir

Which Pandas Method Outperforms for Dictionary-Based Value Replacement in Series?

Considérations sur les performances pour le remplacement des valeurs dans la série Pandas par un dictionnaire

Le remplacement des valeurs dans une série Pandas par un dictionnaire est une préoccupation constante dans la communauté. Bien que les méthodes recommandées soient s.replace(d) ou s.map(d), les performances peuvent varier considérablement en fonction des caractéristiques de l'ensemble de données.

Benchmarking

Pour illustrer les différences de performances, considérons un DataFrame df contenant des entiers aléatoires compris entre 0 et 999.

import pandas as pd, numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 1000, 1000000)})

Cas général

Si nous créons un dictionnaire d mappant les valeurs à leurs successeurs (par exemple, d = {i : i 1 for i in range (1000)}), on observe :

# Full-range dictionary
%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)  # 84.3ms

# Partial-range dictionary
d = {i: i+1 for i in range(10)}
%timeit df['A'].replace(d)  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms

Méthode optimale Sélection

Sur la base d'une analyse comparative, il est évident que s.map est supérieur dans les deux scénarios :

  • Carte complète : Utilisez s.map(d ) pour une couverture complète.
  • Carte partielle (par exemple, < 5 % valeurs): Utilisez s.map(d).fillna(s['A']).astype(int) pour remplir les valeurs manquantes.

Pourquoi s .replace Slow?

s.replace entreprend des opérations plus étendues que s.map. Cela implique de convertir le dictionnaire en liste, de le parcourir et de vérifier les dictionnaires imbriqués avant d'effectuer le remplacement.

En revanche, s.map vérifie simplement si l'argument donné est un dictionnaire ou une série et le convertit si nécessaire. Il mappe efficacement les valeurs en fonction de l'index.

Options alternatives

Dans les cas spécifiques où les performances sont cruciales :

  • Compréhension de liste : Effectuer une opération de remplacement à l'aide d'une compréhension de liste peut être légèrement plus rapide que s.map.
  • s.apply(pd.to_numeric): Cette méthode peut améliorer considérablement les performances lors du remplacement de valeurs par des données manquantes ou non numériques.

Conclusion

Le choix optimal pour remplacer les valeurs d'une série Pandas par un dictionnaire dépend de facteurs tels que la taille du DataFrame, le nombre de valeurs uniques dans le dictionnaire et l'exhaustivité du mappage. En examinant attentivement ces facteurs, les développeurs peuvent sélectionner la méthode la plus efficace pour leur situation particulière.

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