python pandas opérations sur les colonnes
Salut, je voudrais savoir la meilleure façon de faire des opérations sur les colonnes en python à l'aide de pandas.
J'ai un classique de la base de données que j'ai chargé comme un dataframe, et j'ai souvent à faire des opérations telles que pour chaque ligne, si la valeur dans la colonne intitulée " A "est supérieure à x puis remplacez cette valeur par colonne C' moins de la colonne "D"
pour l'instant je fais quelque chose comme
for i in len(df.index):
if df.ix[i,'A'] > x :
df.ix[i,'A'] = df.ix[i,'C'] - df.ix[i, 'D']
Je voudrais savoir si il existe un moyen plus simple de faire ce genre d'opérations et, plus important, le plus efficace que j'ai de grandes bases de données
J'avais essayé sans le pour je la boucle, comme dans R ou Stata, on m'a conseillé d'utiliser "un.tout" ou "un.toutes les" mais je n'en non rien trouver, que ce soit ici ou dans les pandas docs.
Merci par avance.
OriginalL'auteur Anthony Martin | 2013-08-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser un booléen masque avec le
.loc
ou.ix
attributs du DataFrame.Si vous avez beaucoup de ramification des choses, alors vous pouvez faire:
apply
doit généralement être beaucoup plus rapide qu'une boucle for.Cet exemple vous est fourni:
(df['A'] == 999) & (df['B'] == 999)
, Mais si vous avez une des branches avec else en outre, vous devriez utiliserapply
le long de la asix.Mise à jour de l'exemple.
C'est en effet efficace pour certains de mes cas, merci pour ça ; mais dans d'autres, je dois prendre en compte réelle des valeurs différentes, par exemple pour les variables catégorielles : row['A'] == 1 alors A1, row['A'] ==2, puis A2, row['A'] == 3, A3 et ainsi de suite.
J'ai ajouté un exemple à la réponse que couvre ce cas (à l'aide de
apply
).OriginalL'auteur Viktor Kerkez
plus simple selon moi.
Testé, il fonctionne.
>>> df['c'][df['c'] > 0.5] = df['b'] - df['a'] __main__:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
OriginalL'auteur Amrita Sawant
Il y a beaucoup de façons de le faire, mais voici le modèle que j'ai trouver plus simple à lire.
Réglage des éléments de moins de x est aussi facile que de df.loc[~idx, 'A'] = 0
OriginalL'auteur Fergal
Commencer avec..
fin...
>>> df.ix[df.A < 1,df.A = df['c'] - df['d']]; df File "<stdin>", line 1 df.ix[df.A < 1,df.A = df['c'] - df['d']]; df ^ SyntaxError: invalid syntax
OriginalL'auteur SAH