Comment réparer : la longueur des valeurs ne correspond pas à la longueur de l’index



Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :

ValueError: Length of values does not match length of index

Cette erreur se produit lorsque vous tentez d’attribuer un tableau de valeurs NumPy à une nouvelle colonne dans un DataFrame pandas, mais que la longueur du tableau ne correspond pas à la longueur actuelle de l’index.

L’exemple suivant montre comment corriger cette erreur dans la pratique.

Comment reproduire l’erreur

Supposons que nous ayons le DataFrame pandas suivant :

import pandas as pd

#define DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14],
                   'assists': [5, 7, 13, 12]})

#view DataFrame
print(df)

   points  assists
0      25        5
1      12        7
2      15       13
3      14       12

Supposons maintenant que nous essayions d’ajouter une nouvelle colonne appelée « rebonds » en tant que tableau NumPy :

import numpy as np

#attempt to add 'rebounds' column
df['rebounds'] = np.array([3, 3, 7])

ValueError: Length of values (3) does not match length of index (4)

Nous recevons une ValueError car nous tentons d’ajouter un tableau NumPy d’une longueur de 3 à un DataFrame qui a un index d’une longueur de 4 .

Comment réparer l’erreur

Le moyen le plus simple de corriger cette erreur consiste simplement à créer une nouvelle colonne en utilisant une série pandas plutôt qu’un tableau NumPy.

Par défaut, si la longueur de la série pandas ne correspond pas à la longueur de l’index du DataFrame alors les valeurs NaN seront renseignées :

#create 'rebounds' column
df['rebounds'] = pd.Series([3, 3, 7])

#view updated DataFrame
df

	points	assists	rebounds
0	25	5	3.0
1	12	7	3.0
2	15	13	7.0
3	14	12	NaN

En utilisant une série pandas, nous pouvons ajouter avec succès la colonne « rebonds » et les valeurs manquantes sont simplement remplies avec NaN.

Notez que nous pouvons rapidement convertir les valeurs NaN en une autre valeur (telle que zéro) en utilisant la méthode fillna() comme suit :

#fill in NaN values with zero
df = df.fillna(0)

#view updated DataFrame
df

points	assists	rebounds
0	25	5	3.0
1	12	7	3.0
2	15	13	7.0
3	14	12	0.0

Notez que la valeur NaN a été convertie en zéro.

Ressources additionnelles

Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :

Comment réparer KeyError dans Pandas
Comment réparer : ValueError : impossible de convertir le float NaN en entier
Comment réparer : ValueError : les opérandes n’ont pas pu être diffusés avec les formes

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *