Comment mettre à jour les valeurs dans une ligne spécifique dans un Python Pandas DataFrame?
Avec la belle méthodes d'indexation dans les Pandas je n'ai pas de problèmes lors de l'extraction des données de différentes façons. D'autre part, je suis encore confus sur la façon de modifier les données dans un DataFrame.
Dans le code suivant, j'ai deux DataFrames et mon objectif est de mettre à jour les valeurs dans une ligne spécifique dans la première df à partir des valeurs de la deuxième df. Comment puis-je y parvenir?
import pandas as pd
df = pd.DataFrame({'filename' : ['test0.dat', 'test2.dat'],
'm': [12, 13], 'n' : [None, None]})
df2 = pd.DataFrame({'filename' : 'test2.dat', 'n':16}, index=[0])
# this overwrites the first row but we want to update the second
# df.update(df2)
# this does not update anything
df.loc[df.filename == 'test2.dat'].update(df2)
print(df)
donne
filename m n
0 test0.dat 12 None
1 test2.dat 13 None
[2 rows x 3 columns]
mais comment puis-je obtenir ceci:
filename m n
0 test0.dat 12 None
1 test2.dat 13 16
[2 rows x 3 columns]
- La discussion à ce sujet: mise à Jour d'un dataframe dans les pandas lors de l'itération, ligne par ligne
Vous devez vous connecter pour publier un commentaire.
Alors tout d'abord, pandas mises à jour à l'aide de l'indice de. Lorsqu'une commande de mise à jour ne permet pas de mettre à jour quoi que ce soit, vérifiez à la fois côté gauche et le côté droit. Si pour quelque raison vous êtes trop paresseux pour mettre à jour les indices à suivre votre logique d'identification, vous pouvez faire quelque chose le long des lignes de
Si vous voulez le faire pour l'ensemble de la table, je suggère une méthode que je crois est supérieure à celles précédemment mentionnées: depuis votre identifiant est
filename
, ensemblefilename
que votre index, puis utilisezupdate()
comme vous le souhaitiez. Les deuxmerge
et laapply()
approche contenir une surcharge inutile:Si vous avez un gros dataframe et seulement un peu de mise à jour des valeurs que j'utiliserais appliquer comme ceci:
Il y a probablement quelques façons de le faire, mais une approche serait de fusionner les deux dataframes ensemble sur le nom de fichier/m de colonne, puis remplir la colonne " n " de la droite dataframe si une correspondance a été trouvée. Le n_x, n_y dans le code reportez-vous à gauche/à droite dataframes dans la fusion.