web-dev-qa-db-fra.com

Comment sélectionner une plage de valeurs dans une colonne pandas dataframe?

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

?

13
ShanZhengYang

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)
21
root

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

6
Kartik