Recherche…


Introduction

Accès aux lignes d'un fichier de données à l'aide des objets d'indexeur .ix , .loc , .iloc et de la manière dont il se différencie de l'utilisation d'un masque booléen.

Accéder à un DataFrame avec un index booléen

Ce sera notre exemple de trame de données:

df = pd.DataFrame({"color": ['red', 'blue', 'red', 'blue']},
                  index=[True, False, True, False])
      color
True    red
False  blue
True    red
False  blue

Accéder avec .loc

df.loc[True]
     color
True   red
True   red

Accéder avec .iloc

df.iloc[True]
>> TypeError

df.iloc[1]
color    blue
dtype: object

Il est important de noter que les anciennes versions de pandas ne faisaient pas de distinction entre les entrées booléennes et les entrées entières, donc .iloc[True] renverrait la même chose que .iloc[1]

Accéder avec .ix

df.ix[True]
     color
True   red
True   red

df.ix[1]
color    blue
dtype: object

Comme vous pouvez le voir, .ix a deux comportements. Ceci est une très mauvaise pratique en code et doit donc être évité. Veuillez utiliser .iloc ou .loc pour être plus explicite.

Application d'un masque booléen à un dataframe

Ce sera notre exemple de trame de données:

  color      name   size
0   red      rose    big
1  blue    violet    big
2   red     tulip  small
3  blue  harebell  small

En utilisant l’ __getitem__ magique __getitem__ ou [] . En lui donnant une liste de True et False de la même longueur que le dataframe vous donnera:

df[[True, False, True, False]]
  color   name   size
0   red   rose    big
2   red  tulip  small

Masquage des données en fonction de la valeur de la colonne

Ce sera notre exemple de trame de données:

  color      name   size
0   red      rose    big
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

En accédant à une seule colonne à partir d'un pd.Series de données, nous pouvons utiliser une simple comparaison == pour comparer chaque élément de la colonne à la variable donnée, produisant une pd.Series de True et False.

df['size'] == 'small'
0    False
1     True
2     True
3     True
Name: size, dtype: bool

Cette pd.Series est une extension d'un np.array qui est une extension d'une list simple. Ainsi, nous pouvons transmettre ceci à l' __getitem__ ou [] comme dans l'exemple ci-dessus.

size_small_mask = df['size'] == 'small'
df[size_small_mask]
  color      name   size
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

Masquage des données en fonction de la valeur d'index

Ce sera notre exemple de trame de données:

         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small

Nous pouvons créer un masque basé sur les valeurs d'index, comme sur une valeur de colonne.

rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big

Mais faire cela est presque la même que

df.loc['rose']
color    red
size     big
Name: rose, dtype: object

La différence importante étant que, lorsque .loc ne rencontre qu'une ligne dans l'index correspondant, il retournera un pd.Series , s'il rencontre plus de lignes qui correspondent, il retournera un pd.DataFrame . Cela rend cette méthode plutôt instable.

Ce comportement peut être contrôlé en donnant à la .loc une liste d'une seule entrée. Cela l'obligera à retourner un bloc de données.

df.loc[['rose']]
         color   size
name                 
rose       red    big


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow