import pandas as pd
import numpy as np
data = 'filename.csv'
df = pd.DataFrame(data)
df
one two three four five
a 0.469112 -0.282863 -1.509059 bar True
b 0.932424 1.224234 7.823421 bar False
c -1.135632 1.212112 -0.173215 bar False
d 0.232424 2.342112 0.982342 unbar True
e 0.119209 -1.044236 -0.861849 bar True
f -2.104569 -0.494929 1.071804 bar False
Je voudrais sélectionner une plage pour une certaine colonne, disons la colonne two
. Je souhaite sélectionner toutes les valeurs entre -0,5 et +0,5. Comment est-que quelqu'un peut faire ça?
Je m'attendais à utiliser
-0.5 < df["two"] < 0.5
Mais cela (naturellement) donne une ValueError:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
J'ai essayé
-0.5 (< df["two"] < 0.5)
Mais cela génère tout True
.
La sortie correcte doit être
0 True
1 False
2 False
3 False
4 False
5 True
Quelle est la bonne façon de trouver une plage de valeurs dans une colonne pandas dataframe?
EDIT: Question
Utilisation de .between()
avec
df['two'].between(-0.5, 0.5, inclusive=False)
serait la différence entre
-0.5 < df['two'] < 0.5
et les inégalités comme
-0.5 =< df['two'] < 0.5
?
Utilisez between
avec inclusive=False
pour des inégalités strictes:
df['two'].between(-0.5, 0.5, inclusive=False)
Le paramètre inclusive
détermine si les noeuds finaux sont inclus ou non (True
: <=
, False
: <
). Cela s'applique aux deux signes. Si vous voulez des inégalités mixtes, vous devrez les coder explicitement:
(df['two'] >= -0.5) & (df['two'] < 0.5)
.between
est une bonne solution, mais si vous voulez un contrôle plus fin, utilisez ceci:
(0.5 <= df['two']) & (df['two'] < 0.5)
L'opérateur &
est différent de and
. Les autres opérateurs sont |
pour or
, ~
pour not
. Voir cette discussion pour plus d'informations.
Votre déclaration était la même que celle-ci:
(0.5 <= df['two']) and (df['two'] < 0.5)
Elle a donc soulevé l'erreur.