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

求助:无法将Pandas列中的IP地址转换为经纬度(Latitude Longitude)

解决Pandas IP地址转经纬度的AttributeError问题

嘿,我来帮你搞定这个报错~ 你遇到的AttributeError: 'Series' object has no attribute 'latlng'是因为调用geocoder.ip的方式不对,我给你拆解下问题和解决方案:

错误原因

你写的d.apply(geocoder.ip(d['ip_address'].latlng))有两个核心问题:

  1. d['ip_address']是一个Pandas Series对象,它本身并没有latlng属性,直接访问肯定会触发报错;
  2. apply方法需要传入一个能处理单个元素的函数,而不是直接把整个Series丢进去调用方法。

正确解决方案

我们需要对每一个IP地址单独调用geocoder.ip来获取经纬度,这里有两种常用写法:

方法1:自定义函数(推荐,可读性高+可扩展)

import pandas as pd
import geocoder

d = pd.DataFrame({'ip_address' : ['49.206.217.180', '200.8.245.246', '186.188.35.217']})

# 定义处理单个IP的函数,加入空值处理避免报错
def get_ip_coords(ip):
    geo_result = geocoder.ip(ip)
    # 如果能解析出经纬度就返回,否则返回None
    return geo_result.latlng if geo_result.latlng else None

# 对ip_address列的每个元素应用函数
d['coordinate'] = d['ip_address'].apply(get_ip_coords)

方法2:Lambda函数(简洁写法)

如果不想单独定义函数,可以用lambda简化,但注意要避免重复调用地理编码接口:

d['coordinate'] = d['ip_address'].apply(
    lambda x: g.latlng if (g := geocoder.ip(x)) else None
)

额外提醒

  • geocoder的IP解析依赖外部服务,可能存在请求频率限制,如果你的IP数据量很大,建议加入延时或者使用批量接口;
  • 内网IP、未知IP可能无法解析出经纬度,所以一定要加入空值判断,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:39:36