Erreur : either both or neither of x and y should be given

Résolu
gigi123 -  
mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

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

  1. 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".

    0
  2. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     

    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

    0