lok*_*art 50 python loops explicit pandas
我正在进行一些地理编码工作,我曾经用selenium屏幕抓取我需要的位置地址的xy坐标,我将xls文件导入到panda数据帧,并希望使用显式循环来更新没有xy坐标的行,如下面:
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']
Run Code Online (Sandbox Code Playgroud)
我已经读过为什么在我对一个pandas DataFrame进行操作后,这个函数"没有"?并且我完全清楚iterrow只给了我们一个视图而不是一个副本进行编辑,但如果我真的要逐行更新值呢?是否lambda可行?
Mar*_*ius 85
您从中返回的行iterrows是不再连接到原始数据框的副本,因此编辑不会更改您的数据框.值得庆幸的是,因为您从中返回的每个项都iterrows包含当前索引,您可以使用它来访问和编辑数据帧的相关行:
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']
Run Code Online (Sandbox Code Playgroud)
根据我的经验,这种方法似乎比使用的方法一样慢apply或map,但一如既往,这是由你来决定如何使性能/易于编程的权衡.
Ali*_*chi 11
基于这个问题的另一种方法:
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.at[index, 'wgs1984_latitude'] = dict_temp['lat']
rche_df.at[index, 'wgs1984_longitude'] = dict_temp['long']
Run Code Online (Sandbox Code Playgroud)
此链接.loc描述了和之间的区别.at。很快,.at比 还要快.loc。
| 归档时间: |
|
| 查看次数: |
48988 次 |
| 最近记录: |