Comment réparer : ValueError : impossible de masquer avec un tableau non booléen contenant des valeurs NA/NaN
Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :
ValueError: Cannot mask with non-boolean array containing NA / NaN values
Cette erreur se produit généralement lorsque vous essayez de trouver les lignes d’un DataFrame pandas qui contiennent une chaîne particulière, mais que la colonne dans laquelle vous recherchez a des valeurs NaN.
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
import numpy as np
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B'],
'position': ['Guard', 'Guard', np.nan, 'Guard', 'Forward'],
'points': [22, 28, 14, 13, 19]})
#view DataFrame
print(df)
team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19
Supposons maintenant que nous essayions d’accéder à toutes les lignes du DataFrame où la colonne de position contient la chaîne « Guard » :
#access all rows where position column contains 'Guard'
df[df['position'].str.contains('Guard')]
ValueError: Cannot mask with non-boolean array containing NA / NaN values
Nous recevons une erreur car il y a une valeur NaN dans la colonne position .
Comment réparer l’erreur
Pour éviter cette erreur, il suffit d’utiliser l’argument na=False dans la fonction str.contains() :
#access all rows where position column contains 'Guard', ignore NaN
df[df['position'].str.contains('Guard', na=False)]
team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13
Cette fois, nous pouvons accéder à toutes les lignes contenant « Guard » dans la colonne de position sans aucune erreur.
Une autre façon d’éviter cette erreur consiste à utiliser .fillna(False) comme suit :
#access all rows where position column contains 'Guard', ignore NaN
df[df['position'].str.contains('Guard').fillna(False)]
team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13
Une fois de plus, nous pouvons accéder à toutes les lignes contenant « Guard » dans la colonne de position sans aucune erreur.
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