itérer sur les pandas dataframe et mise à jour de la valeur - AttributeError: ne peut pas définir l'attribut
Je suis en train de parcourir une pandas dataframe et mise à jour de la valeur si la condition est remplie, mais j'obtiens une erreur.
for line, row in enumerate(df.itertuples(), 1):
if row.Qty:
if row.Qty == 1 and row.Price == 10:
row.Buy = 1
AttributeError: can't set attribute
OriginalL'auteur Sun | 2017-04-05
Vous devez vous connecter pour publier un commentaire.
Première itération dans les pandas est possible, mais très lent, donc, une autre vectorisé solution sont utilisés.
Je pense que vous pouvez utiliser
iterrows
si vous avez besoin d'une itération:Mais le mieux est d'utiliser vectorisé solutions – définir la valeur par boolean masque avec
loc
:Ou de la solution avec
masque
:Ou si vous avez besoin d'
if...else
utilisationnumpy.où
:Échantillons.
De définir des valeurs par conditions:
OriginalL'auteur jezrael
Ok, si vous avez l'intention de définir des valeurs dans
df
ensuite, vous devez suivre lesindex
valeurs.option 1
à l'aide de
itertuples
option 2
à l'aide de
iterrows
option 3
à l'aide de droites boucle avec
get_value
itertuples
.. Non!tuples
sont immuables...ce qui signifie qu'ils ne peuvent pas être modifiés.iterrows
... Non?pd.Series
peut certainement être changé. Maisrow
n'est qu'une copie de la ligne dans ledf
. Je vais ajouter une option de boucle. Cependant,pandas
si beaucoup plus efficace avec son vectorisé opérations comme @jezrael points.vous pouvez toujours utiliser itertuples. indice de 0 donne l'indice de la dataframe, de sorte que vous pouvez simplement utiliser pour insérer la valeur en faisant quelque chose comme i = row[0], suivi par df.loc[i, 'column_name'] = some_value
C'est un bon point.
OriginalL'auteur piRSquared
pandas.DataFrame.set_value méthode est obsolète depuis la 0.21.0 pd.DataFrame.set_value
Utilisation les pandas.Dataframe.au
OriginalL'auteur Saurabh