Pandas DataFrame 更新列

李文森特

我正在嘗試通過我擁有的物理地址獲取場地的經度和緯度。

為此,我正在使用 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) 

當我執行它時,我得到“無法連接 '<class 'float'>' 類型的對象;只有 Series 和 DataFrame objs 是有效的”。

我一開始以為是因為從GoogleMaps獲取信息的時候,是json格式的。

所以,我嘗試添加以下內容

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

然後我得到一個錯誤“列表索引必須是整數或切片,而不是 str”。

任何人都可以提供一種方法來正確插入 df['lat'], df['lng'] 物理地址 df['ADDR'] 旁邊的值嗎?

亞歷克斯蒙塔諾

要在 DataFrame 中添加新列並更新其值,您可以在循環中使用它,而無需先驗定義列:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章