2
votes

Modifier des cellules spécifiques dans la trame de données pandas?

J'essaie d'écrire une fonction qui permettra à un utilisateur de sélectionner facilement une cellule spécifique dans un dataframe pandas et de changer sa valeur. Par exemple, dans le cadre de données ci-dessous, j'aimerais qu'un utilisateur puisse sélectionner une cellule par date et action, dites "2018-03-02" et "Fumier", et changer la valeur en "1".

Exemple de graphique

J'ai déjà fait cela à 2018-03-02 et "Cutting" en utilisant ce code (le dataframe est nommé q):

q.iat[1,1]=1

Cependant, j'aimerais pouvoir changer la cellule en utilisant quelque chose comme q.iat ["2018-03-02", "Cutting"] = 1 , mais je ne sais pas comment faire cela, car il dit que .iat ne reconnaît que positions entières. Y a-t-il autre chose que .iat que je pourrais utiliser, ou devrais-je définir un dictionnaire pour chaque date et chaque colonne?


0 commentaires

4 Réponses :


-1
votes

Vous pouvez utiliser DataFrame.loc, cela devrait vous aider à démarrer: https: //pandas.pydata.org/pandas-docs/stable/indexing.html

Dans votre exemple:

q.loc["2018-03-02","Manure"]=1


0 commentaires

0
votes

Votre dataframe est indexé avec des noms de colonnes et un index. Vous pouvez définir votre index avec set_index : df.set_index ('date')
Utilisez ensuite votre index de date et la colonne 'Cutting' pour modifier une valeur avec . loc : df.loc ('2018-03-02', 'Cutting') = 1


0 commentaires

0
votes

pd.DataFrame.at

Utilisez à au lieu de iat pour une indexation scalaire efficace basée sur les étiquettes:

q.at['2018-03-02', 'Cutting'] = 1

To résumé :

Petit guide d'indexation:

  1. Utilisez iat / at pour un accès / un réglage scalaire par position d'entier ou par étiquette respectivement.
  2. Utilisez iloc / loc pour un accès / un réglage non scalaire par position d'entier ou par étiquette, respectivement.


0 commentaires

0
votes

Vous pouvez sélectionner des colonnes par nom dans les pandas en utilisant simplement son nom:

q['Manure'letter

Afin de sélectionner les lignes, vous avez besoin d'un index pour les identifier de manière unique, cela pourrait être la date si vous vous assurez qu'elle est dans un format qui l'identifie de manière unique. Par exemple:

q = q.set_index (pd.DatetimeIndex (q ['Dates']))

Ensuite, vous pouvez sélectionner chaque cellule en faisant:

q.loc [,


0 commentaires