所以这可能看起来像一个奇怪的问题,但我有一个带有地址的熊猫DataFrame
,我想要进行地理编码以便获得经度和纬度。
由于这个非常有用的线程(new column with coordinates using geopy pandas),我的代码可以使用.apply()
,但我的问题是所有开放API都限制了它们允许的每秒请求数,并且还要求每天。
我还没有找到任何方法来限制我的代码,以便与API的限制相匹配。我的DF有25K行,但是如果我用最多5行创建它的子集,我只能成功地进行地理编码。
我没有很多python和pandas的经验,但在SAS中,DATA步骤一次迭代一行,所以我可以使用一个睡眠命令来限制请求。使用python / pandas实现类似功能的最佳方法是什么?
编辑:所以基于到目前为止的答案,我想确认,我的代码将改为:
df_small['city_coord'] = df_small['Address'].apply(geolocator.geocode).apply(lambda x: (x.latitude, x.longitude))
致:
df_small = df_clean[:5]
def f(x, delay=1):
# run your code
sleep(delay)
return geolocator.geocode(x)
df_small['city_coord'] = df_small['Address'].apply(f).apply(lambda x: (x.latitude, x.longitude))
答案 0 :(得分:3)
要延迟迭代,您可以使用df.iterrows()
和time.sleep()
:
from time import sleep
for row in df.iterrows():
# run your code
sleep(1) # how many seconds to wait
或者您可以将time.sleep()
放在apply
函数本身内(正如@RafaelC在评论中所建议的那样):
def f(x, delay=1):
# run your code
sleep(delay)
df.apply(f)