J'essaie de modifier un DataFrame df
pour ne contenir que des lignes pour lesquelles les valeurs de la colonne closing_price
sont comprises entre 99 et 101 et j'essaie de le faire avec le code ci-dessous.
Cependant, j'obtiens l'erreur
ValueError: la valeur de vérité d'une série est ambiguë. Utilisez a.empty, a.bool (), a.item (), a.any () ou a.all ()
et je me demande s'il existe un moyen de le faire sans utiliser de boucles.
df = df[(99 <= df['closing_price'] <= 101)]
df.query
etpd.eval
semblent bien adaptés à ce cas d'utilisation. Pour plus d'informations sur lapd.eval()
famille de fonctions, leurs fonctionnalités et leurs cas d'utilisation, veuillez visiter Évaluation des expressions dynamiques dans les pandas à l'aide de pd.eval () .Réponses:
Vous devez utiliser
()
pour regrouper votre vecteur booléen pour supprimer toute ambiguïté.la source
Considérez également les séries entre :
la source
inclusive=True
est utilisée par défaut dansbetween
, vous pouvez donc interroger comme cecidf = df[df['closing_price'].between(99, 101)]
between
.df = df[~df['closing_price'].between(99, 101)]
il existe une meilleure alternative - utilisez la méthode query () :
UPDATE: réponse au commentaire:
la source
mean
etsd
? Sont ces noms de colonnes?vous pouvez également utiliser la
.between()
méthodela source
ou
la source
Si vous avez affaire à plusieurs valeurs et à plusieurs entrées, vous pouvez également configurer une fonction d'application comme celle-ci. Dans ce cas, filtrer une trame de données pour les emplacements GPS qui correspondent à certaines plages.
la source
Au lieu de cela
Vous devriez utiliser ceci
Nous devons utiliser les opérateurs logiques bit à bit de NumPy |, &, ~, ^ pour les requêtes composées. De plus, les parenthèses sont importantes pour la priorité des opérateurs.
Pour plus d'informations, vous pouvez visiter le lien: Comparaisons, masques et logique booléenne
la source