【问题标题】:Pandas DataFrame updating columnsPandas DataFrame 更新列
【发布时间】:2021-10-26 13:05:19
【问题描述】:

我正在尝试通过我拥有的物理地址获取场地的经度和纬度。

为此,我正在使用 GoogleMaps API。

在执行以下代码时,我一直在尝试将经度和纬度直接插入数据框的空列中。

  • 在 df['ADDR'] 中存储了 1,500 个场所的物理地址。
    import pandas as pd
    import googlemaps
    
    locations = df['ADDR']
    df['lat'] = ""
    df['lng'] = ""
    
    i = 0
    for location in locations:
        i = i + 1
        try:
            print("%d indexing %s location" % (i, location))
            geo_location = maps.geocode(location)[0].get('geometry')
            print(geo_location['location']['lat'], geo_location['location']['lng'])
            df['lat'].append(geo_location['location']['lat'])
            df['lng'].append(geo_location['location']['lng'])
            print(df)
        
            except IndexError:
                print("Address was wrong...")
            except Exception as e:
                print("Unexpected error occurred.", e) 

当我执行它时,我得到“无法连接类型 '' 的对象;只有 Series 和 DataFrame objs 有效”。

我最初以为这是因为当我从 GoogleMaps 获取信息时,它是 json 格式的。

所以,我尝试添加以下内容

geo_lat = pd.to_Series(geo_location['location']['lat'], geo_location(['location']['lng'])

然后我得到一个错误“列表索引必须是整数或切片,而不是 str”。

任何人都可以提供一种方法将值插入到物理地址 df['ADDR'] 旁边的 df['lat'], df['lng'] 中吗?

【问题讨论】:

    标签: python pandas google-maps-api-3


    【解决方案1】:

    要在 DataFrame 中添加新列并更新其值,您可以在循环中使用它,而无需先验地定义列:

    for i, location in enumerate(locations):
        df.at[i, 'lat'] = geo_location['location']['lat']
        df.at[i, 'lng'] = geo_location['location']['lng']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      相关资源
      最近更新 更多