Comprendre "ValueError : impossible de réindexer à partir d'un axe en double"
Dans la bibliothèque Pandas de Python, ce message d'erreur indique qu'une opération ne peut pas être effectuée car la structure de données contient des valeurs en double dans l'axe référencé.
Cause de l'erreur
Plus précisément, l'erreur se produit lors de la tentative de réindexation d'un DataFrame ou d'une série en attribuant une nouvelle ligne ou colonne utilisant un index qui existe déjà. La réindexation implique de modifier les étiquettes d'index, et si des étiquettes en double sont présentes, il devient impossible de mapper de manière unique les opérations aux données correspondantes.
Exemple de scénario
Pour illustrer ceci erreur, considérez un Pandas DataFrame avec des noms de colonnes en double. Voici un extrait de Python qui montre comment cela peut se produire :
<code class="python">import pandas as pd df = pd.DataFrame({ "ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"], "Score": [90, 80, 70], "Age": [25, 26, 27] }) df["Score"] = df["Score"] * 2 df["Age"] = df["Age"] + 1 # Attempt to create a duplicate column df["Score"] = df["Score"] * 1.1</code>
Lorsque vous exécutez cet extrait, vous rencontrerez l'erreur suivante :
ValueError: cannot reindex from a duplicate axis
C'est parce que le DataFrame a déjà une colonne nommée « Score » et vous essayez de lui attribuer une nouvelle valeur en utilisant le même nom. La colonne en double empêche Pandas de réindexer la colonne avec succès.
Solution
Pour résoudre cette erreur, vous devez vous assurer que les valeurs d'index utilisées pour la réindexation sont uniques. Dans le cas d'une affectation à des lignes ou des colonnes existantes, cela signifie éviter les étiquettes en double. Si les valeurs en double ont été introduites involontairement, vous pouvez vérifier l'index à l'aide de la méthode .duplicate() et supprimer les doublons en conséquence.
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!