使用 Google Maps API 根据 Pandas 数据框中的列表查找街道交叉口纬度和经度坐标

问题描述 投票:0回答:1

我正在完成我的第一个数据项目,有一个显示街道交叉口的数据框,如下所示:

        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”。我不太确定如何解决这个问题。任何有关如何实现此解决方案的帮助或建议将不胜感激。

pandas google-maps-api-3
1个回答
0
投票

地址不明确,地理编码器无法返回任何结果

地理编码地址最佳实践文档指出:

一般情况下,对完整地址进行地理编码时使用地理编码 API (例如,“48 Pirrama Rd, Pyrmont, NSW, Australia”)。使用 地理编码不明确时的地点 API 地点自动完成服务 (不完整)

在您的情况下,这些地址不完整,因此地理编码 API 正在按预期工作。我尝试对返回

NaN
的地址进行地理编码,并确认它确实返回
ZERO_RESULTS

您可以尝试以下任一方法:

  1. 通过查询明确的地址

    提高搜索质量
    • 如果您没有自动化的方法来执行此操作,那么这将是一项严格的任务(正如您在问题中提到的那样)。
    • 例如,通过在末尾添加
      State St & Kinzie St
      (
      Chicago
      ) 来更改地址
      State St & Kinzie St Chicago
      将返回结果:
      41.889261,-87.627984
      而不是
      ZERO_RESULTS
  2. 使用文档中提到的Places API Place Autocomplete

    • 有了这个,由于您正在运行 for 循环,您的请求成本将会增加。
    • 但是对于这个,自动完成功能可能会返回多个结果,并且您仍然需要一个检查器是否正确。

但是这个解决方案并不是最佳的,可能会导致一些问题,因为它仍然被认为是仅对明确地址进行地理编码的最佳实践。

话虽如此,我仍然希望这些信息有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.