Erreur : either both or neither of x and y should be given
RésoluBonjour,
Après avoir écris cette ligne :
df['Result']=np.where(df['Libellé']==df['Catalogue urnes'],df['Consommables'])
J'obtiens donc cette erreur :
either both or neither of x and y should be given
A savoir : les colonnes libellé, catalogue urnes et consommables sont de type string et ne dispose pas le même nombre de ligne.
Ce que je veux : si la colonne libellé et égale = la colonne catalogue urnes , alors dans la colonne que je veux crée (result), j'inscris ce qu'il est noté dans la colonne consommable
Merci à vous
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
Te pense que le message d'erreur t'indique qu'il manque un paramètre.
Dans ton explication, tu écris "si ..., alors ...". Il manque le "sinon".
-
Bonjour,
Explication de l'erreur
L'erreur vient de np.where qui s'utilise de deux manières possibles :
- soit tu donnes juste un paramètre, et la valeur retournée correspond à la zone conservée par np.where :
import numpy as np a = np.arange(10) b = np.where(a < 5)[0] print(b) # [0, 1, 2, 3, 4]
- soit tu donnes trois paramètres (condition, x, y) : si la condition est vraie, alors les données retournées sont prises depuis x, sinon depuis y.
import numpy as np a = np.arange(10) b = np.arange(100, 110) c = np.arange(200, 210) d = np.where(a % 2 == 0, b, c) print(d) # [100 201 102 203 104 205 106 207 108 209]
Comme tu n'es dans aucun de ces deux cas, np.where te dit que tu ne l'as pas appelé avec un nombre de paramètre valide.
Retour à ton problème
Ce que je veux : si la colonne libellé et égale = la colonne catalogue urnes , alors dans la colonne que je veux crée (result), j'inscris ce qu'il est noté dans la colonne consommable
Il te faut donc utiliser la version à trois paramètres. Dans le code que tu proposes, tu ne spécifies pas comment doit être rempli df["Result"] si la condition n'est pas vérifiée, d'où l'erreur. Peut-être veux tu écrire :
df["Result"] = np.where( df["Libellé"] == df["Catalogue urnes"], df["Consommables"], df["Result"] )Bonne chance