You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用GoogleMaps API获取地址经纬度写入Pandas DataFrame列报错求助

报错原因分析
  • 第一个报错cannot concatenate object of type '<class 'float'>':你错误使用了df['lat'].append()方法,pandas.Series.append仅支持拼接Series、DataFrame类的对象,不能直接拼接浮点数;且你已经提前初始化了和原DataFrame长度一致的lat、lng列,完全不需要使用append操作,直接按行索引赋值即可。
  • 第二个报错list indices must be integers or slices, not str:你的类型转换代码语法错误,geo_location(['location']['lng'])把geo_location当成了函数调用,同时错误用字符串'location'索引列表,触发了类型错误,这个转换逻辑本身也不需要。
正确实现代码
import pandas as pd
import googlemaps
import time # 可选,用于控制API请求频率

# 初始化Google Maps客户端,替换为你自己的API密钥
maps = googlemaps.Client(key='你的Google Maps API密钥')

locations = df['ADDR']
# 初始化空列,用pd.NA更规范,方便后续处理缺失值
df['lat'] = pd.NA
df['lng'] = pd.NA

# 用enumerate直接获取行索引,不需要手动计数
for idx, location in enumerate(locations):
    try:
        print(f"{idx+1} 正在处理地址: {location}")
        geo_location = maps.geocode(location)[0].get('geometry')
        lat = geo_location['location']['lat']
        lng = geo_location['location']['lng']
        print(f"解析结果: 纬度 {lat}, 经度 {lng}")
        # 按当前行索引赋值,保证和地址一一对应
        df.loc[idx, 'lat'] = lat
        df.loc[idx, 'lng'] = lng
        # 可选:控制请求频率避免触发API配额限制
        time.sleep(0.1)
    except IndexError:
        print(f"地址 {location} 解析失败,地址有误")
    except Exception as e:
        print(f"处理地址 {location} 时发生未知错误: {e}")

# 处理完成后可查看前几行验证结果
print(df.head())
补充说明

如果你的DataFrame索引不是默认的从0开始的连续整数,把循环改为for idx, location in locations.items(),即可拿到原DataFrame的真实索引,避免赋值错位。

内容的提问来源于stack exchange,提问作者Lee Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:15:04