【发布时间】:2021-10-13 18:50:40
【问题描述】:
我有来自 NASA 网站的数据,其中包含一堆坐标,我试图通过 geopy 每 1 小时通过这些坐标找到它们属于哪个国家。但不幸的是,获得国家名称需要相当多的时间。
如何缩短流程时间?
这是我的代码;
import pandas as pd
import numpy as np
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="geoapiExercises")
df=pd.read_csv("https://firms.modaps.eosdis.nasa.gov/data/active_fire/modis-c6.1/csv/MODIS_C6_1_Europe_24h.csv")
df.latitude=df.latitude.astype(str)
df.longitude=df.longitude.astype(str)
country_list=[]
for i in range(len(df)):
try:
location = geolocator.reverse(df.latitude[i]+","+df.latitude[i])
country=location.raw["address"]["country"]
country_list.append(country)
except:
country_list.append("None")
print(i)
continue
df_s=pd.Series(country_list)
df["Country"]=df_s
df.to_csv("map_data_R00.csv",index=False)
【问题讨论】:
-
定义“太长”。该 CSV 在发表评论时有 846 个条目。地理定位 800 组坐标需要 一些 时间。
-
问题是你不能将URL(str)作为第一个参数传递给read_csv。见:-pandas.pydata.org/pandas-docs/version/0.21/generated/…
-
看起来地理编码器正在尝试解析您经过的位置的确切地址。对于您要完成的工作,这似乎是一个很大的矫枉过正。但是这个 SO question 似乎有你需要的东西。我没有测试过。 gis.stackexchange.com/questions/88011/…
-
@DarkKnight 实际上是从路径而不是 url 读取的。我粘贴了 url 以显示 ppl 数据框的样子
-
延迟来自 CSV 的获取。如果您从 Safari 调用该 URL 并重复执行此操作,您会注意到内容发生了变化 - 即它被附加到服务器端。我已经尝试了 requests 和 urllib 模块,并精确地模拟了在 Safari 中传输的标头,并注意响应时间约为 75 秒。如果我将超时设置为 5 秒,那么我会在该时间内得到响应(显然)。但是,内容可能不完整。如果您在浏览器中检查数据,您还会注意到最后一行通常被截断/不完整