代码之家  ›  专栏  ›  技术社区  ›  dustin

使用geopy从熊猫数据帧中的坐标中找到国家名称

  •  3
  • dustin  · 技术社区  · 10 年前

    我正在尝试确定中每一行的国家名称 pandas 数据帧使用 geopy 。我拥有的是:

    import pandas as pd
    from geopy.geocoders import GoogleV3
    
    df = pd.DataFrame({'ser_no': [1, 1, 1, 2, 2, 2],
                    'lat': [53.57, 35.52, 35.53, 54.66, 54.67, 55.8],
                    'lon': [-117.20, -98.29, -98.32, -119.48, -119.47, -119.46]})
    
    def get_country(locations):
        locations = geolocator.reverse(row['lat'], row['lon'], timeout = 10)
        for location in locations:
            for component in location.raw['address_components']:
                if 'country' in component['types']:
                    return component['long_name']
    
    my_key = my_api_key                   
    geolocator = GoogleV3(my_key, proxies ={"http": 'my proxy',
                                            "https": 'my proxy'})
    
    df['country'] = df.apply(lambda row: get_country(row), axis = 1)
    

    这将返回

         lat     lon  ser_no                                       country
    0  53.57 -117.20       1  <function get_country at 0x000000000F6F9C88>
    1  35.52  -98.29       1  <function get_country at 0x000000000F6F9C88>
    2  35.53  -98.32       1  <function get_country at 0x000000000F6F9C88>
    3  54.66 -119.48       2  <function get_country at 0x000000000F6F9C88>
    4  54.67 -119.47       2  <function get_country at 0x000000000F6F9C88>
    5  55.80 -119.46       2  <function get_country at 0x000000000F6F9C88>
    

    没有发生错误,但我的输出没有用。我不确定它是否返回错误,或者我的 apply .

    1 回复  |  直到 10 年前
        1
  •  1
  •   EdChum Arthur G    10 年前

    geolocator.reverse 需要一个字符串,因此需要将函数更改为:

    def get_country(row):
        pos = str(row['lat']) + ', ' + str(row['lon'])
        locations = geolocator.reverse(pos, timeout = 10)
        #... rest of func the same