我正在完成我的第一个数据项目,有一个显示街道交叉口的数据框,如下所示:
from_station_name count
86 Canal St & Adams St 50575
152 Clinton St & Madison St 5990
157 Clinton St & Washington Blvd 45378
159 Columbus Dr & Randolph St 31370
252 Franklin St & Monroe St 30832
321 Kingsbury St & Kinzie St 30654
175 Daley Center Plaza 30423
89 Canal St & Madison St 27138
410 Michigan Ave & Washington St 25468
330 LaSalle St & Jackson Blvd 23021
我正在尝试查找交叉点的纬度和经度坐标,并将该信息放置在该数据帧的另外两列中。
我尝试使用 Google Maps API 编写一个循环,如下所示:
def geocode_intersection(api_key, intersection):
base_url = "https://maps.googleapis.com/maps/api/geocode/json?"
params = {"address": intersection, "key": api_key}
response = requests.get(base_url, params=params)
if response.status_code == 200:
data = json.loads(response.text)
if data["status"] == "OK":
location = data["results"][0]["geometry"]["location"]
return location["lat"], location["lng"]
else:
return None
else:
return None
api_key = "MY_API_KEY"
# Initialize new columns
busiest_stations_subs["latitude"] = np.nan
busiest_stations_subs["longitude"] = np.nan
# Loop through the DataFrame
for index, row in busiest_stations_subs.iterrows():
intersection = row["from_station_name"]
result = geocode_intersection(api_key, intersection)
if result is not None:
latitude, longitude = result
busiest_stations_subs.at[index, "latitude"] = latitude
busiest_stations_subs.at[index, "longitude"] = longitude
并且正确地得到了许多交集,但许多都是 NaN,如下所示:
580 Wabash Ave & Roosevelt Rd 15914 41.861202 -87.943284
544 State St & Kinzie St 15764 NaN NaN
191 Damen Ave & Pierce Ave 15546 41.909363 -87.677420
339 Lake Shore Dr & North Blvd 15520 28.107321 -82.729723
235 Fairbanks Ct & Grand Ave 15477 64.840051 -147.719976
424 Morgan St & Lake St 15307 NaN NaN
499 Sheffield Ave & Fullerton Ave 15129 41.925373 -87.653611
582 Wacker Dr & Washington St 15010 NaN NaN
619 Wilton Ave & Belmont Ave 14990 41.939913 -87.652890
122 Clark St & Armitage Ave 14881 41.918477 -87.636128
559 Streeter Dr & Grand Ave 14879 NaN NaN
329 LaSalle St & Illinois St 14412 41.890819 -87.632670
197 Dearborn Pkwy & Delaware Pl 14144 41.898748 -87.629835
我了解到,具有 NaN 的交叉路口的街道名称缺少实际街道的 N、E、W、S 方向指示符。我可以在 Google 地图上查看缺少的方向指示器,但是我的数据中有数十万行。有没有一种方法可以自动查看所有 NaN 并查找实际的街道名称并替换数据框中的名称?一个问题是,像芝加哥的“Lake St”这样的街道有两个版本,“W Lake St”和“E Lake St”。我不太确定如何解决这个问题。任何有关如何实现此解决方案的帮助或建议将不胜感激。
地理编码地址最佳实践文档指出:
一般情况下,对完整地址进行地理编码时使用地理编码 API (例如,“48 Pirrama Rd, Pyrmont, NSW, Australia”)。使用 地理编码不明确时的地点 API 地点自动完成服务 (不完整)
在您的情况下,这些地址不完整,因此地理编码 API 正在按预期工作。我尝试对返回
NaN
的地址进行地理编码,并确认它确实返回 ZERO_RESULTS
。
您可以尝试以下任一方法:
通过查询明确的地址
提高搜索质量State St & Kinzie St
(Chicago
) 来更改地址 State St & Kinzie St Chicago
将返回结果:41.889261,-87.627984
而不是 ZERO_RESULTS
。使用文档中提到的Places API Place Autocomplete
但是这个解决方案并不是最佳的,可能会导致一些问题,因为它仍然被认为是仅对明确地址进行地理编码的最佳实践。
话虽如此,我仍然希望这些信息有帮助!