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".
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?
4 Réponses :
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
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:
- Utilisez
iat
/at
pour un accès / un réglage scalaire par position d'entier ou par étiquette respectivement.- Utilisez
iloc
/loc
pour un accès / un réglage non scalaire par position d'entier ou par étiquette, respectivement.
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 [