Mic*_*llo 3 python geocoding pandas
所以这似乎是一个奇怪的问题,但我有一个DataFrame带有地址的熊猫,我想对它进行地理编码,这样我就可以获得纬度和经度。
.apply()由于这个非常有用的线程(带有使用 geopy pandas 的坐标的新列),我的代码可以使用,但我的问题是所有开放 API 对每秒允许的请求数以及每天的请求数都有严格的限制。
我还没有找到任何方法来限制我的代码,以便符合 API 的限制。我的 DF 有 25K 行,但只有在创建最多 5 行的子集时,我才能成功进行地理编码。
我对 python 和 pandas 没有太多经验,但在 SAS 中,DATA 步骤一次迭代一行,因此我可以使用 sleep 命令来限制请求。使用 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))
Run Code Online (Sandbox Code Playgroud)
要延迟迭代,您可以使用df.iterrows()and time.sleep():
from time import sleep
for row in df.iterrows():
# run your code
sleep(1) # how many seconds to wait
Run Code Online (Sandbox Code Playgroud)
或者您可以直接放入time.sleep()函数apply本身(正如 @RafaelC 在评论中建议的那样):
def f(x, delay=1):
# run your code
sleep(delay)
df.apply(f)
Run Code Online (Sandbox Code Playgroud)