Je fais un travail de géocodage que j'ai utilisé Selenium
pour filtrer la coordonnée xy dont j'ai besoin pour l'adresse d'un emplacement, j'ai importé un fichier xls dans panda dataframe et je souhaite utiliser une boucle explicite pour mettre à jour les lignes qui ne le sont pas. avoir la coordonnée xy, comme ci-dessous:
for index, row in rche_df.iterrows():
if isinstance(row.wgs1984_latitude, float):
row = row.copy()
target = row.address_chi
dict_temp = geocoding(target)
row.wgs1984_latitude = dict_temp['lat']
row.wgs1984_longitude = dict_temp['long']
J'ai lu Pourquoi cette fonction "prend-elle" après que j'aie traversé un pandas DataFrame? et suis pleinement conscient du fait qu'iterrow ne nous donne qu'une vue plutôt qu'un copier pour le modifier, mais que se passe-t-il si je souhaite réellement mettre à jour la valeur ligne par ligne? lambda
est-il faisable?
Les lignes que vous récupérez de iterrows
sont des copies qui ne sont plus connectées au cadre de données d'origine. Par conséquent, les modifications ne modifient pas votre cadre de données. Heureusement, comme chaque élément que vous récupérez de iterrows
contient l'index actuel, vous pouvez l'utiliser pour accéder à la ligne correspondante du cadre de données et la modifier:
for index, row in rche_df.iterrows():
if isinstance(row.wgs1984_latitude, float):
row = row.copy()
target = row.address_chi
dict_temp = geocoding(target)
rche_df.loc[index, 'wgs1984_latitude'] = dict_temp['lat']
rche_df.loc[index, 'wgs1984_longitude'] = dict_temp['long']
D'après mon expérience, cette approche semble plus lente que d'utiliser une approche telle que apply
ou map
, mais comme toujours, il vous appartient de décider comment faire le compromis performance/facilité de codage.