web-dev-qa-db-fra.com

Pandas DataFrame: remplace toutes les valeurs d'une colonne, en fonction de la condition

J'ai un simple DataFrame comme celui-ci:

Pandas DataFrame

Je souhaite sélectionner toutes les valeurs de la colonne "Première saison" et remplacer celles de 1990 par 1. Dans cet exemple, seul le Baltimore Ravens aurait remplacé le 1996 par 1 (en conservant intactes les données restantes).

J'ai utilisé les éléments suivants:

df.loc[(df['First Season'] > 1990)] = 1

Mais, il remplace toutes les valeurs de cette ligne par 1, et pas uniquement celles de la colonne "Première saison".

Comment puis-je remplacer uniquement les valeurs de cette colonne?

85
ichimok

Vous devez sélectionner cette colonne:

In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df

Out[41]:
                 Team  First Season  Total Games
0      Dallas Cowboys          1960          894
1       Chicago Bears          1920         1357
2   Green Bay Packers          1921         1339
3      Miami Dolphins          1966          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers          1950         1003

Donc, la syntaxe est la suivante:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

Vous pouvez vérifier le docs et aussi le 10 minutes to pandas qui montre la sémantique

EDIT

Si vous voulez générer un indicateur booléen, vous pouvez simplement utiliser la condition booléenne pour générer une série booléenne et transtyper le type de données en int, ce qui convertira True et False en 1 et 0 respectivement:

In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df

Out[43]:
                 Team  First Season  Total Games
0      Dallas Cowboys             0          894
1       Chicago Bears             0         1357
2   Green Bay Packers             0         1339
3      Miami Dolphins             0          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers             0         1003
145
EdChum

Un peu tard pour la fête mais quand même - je préfère utiliser numpy où:

import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])
21
Amir F