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

如何用Pandas+Geopy批量从坐标提取墨西哥州名

用Pandas Apply批量提取墨西哥州名(附速度优化)

1. 基础实现:单个坐标处理函数

先封装单个坐标的反向地理编码逻辑,包含异常处理和墨西哥州字段的解析:

import pandas as pd
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

# 初始化地理编码器,必须设置user_agent标识你的应用
geolocator = Nominatim(user_agent="mexico_state_lookup")
# 添加请求频率限制,避免触发服务封禁
reverse_geocode = RateLimiter(geolocator.reverse, min_delay_seconds=1)

def extract_mexico_state(lat, lon):
    try:
        # 执行反向地理编码
        location = reverse_geocode((lat, lon), exactly_one=True)
        if not location:
            return None
        # 从返回的地址组件中提取州名(Nominatim中墨西哥州对应键为'state')
        address_components = location.raw.get('address', {})
        return address_components.get('state')
    except Exception as e:
        print(f"Failed to process ({lat}, {lon}): {str(e)}")
        return None

2. 用Apply批量处理DataFrame

直接使用df.apply()遍历每一行,传入经纬度调用上述函数:

# 读取Excel数据
df = pd.read_excel("your_data.xlsx")

# 假设你的经纬度列名为'latitude'和'longitude',生成新列存储州名
df['mexico_state'] = df.apply(
    lambda row: extract_mexico_state(row['latitude'], row['longitude']),
    axis=1
)

# 可选:保存结果到新Excel
df.to_excel("data_with_states.xlsx", index=False)

3. 速度优化方案

针对反向地理编码速度慢的问题,推荐两个关键优化:

3.1 缓存重复坐标结果

用functools.lru_cache缓存已查询过的坐标,避免重复请求:

from functools import lru_cache

# 注意:将经纬度转为可哈希的元组,才能被缓存
@lru_cache(maxsize=None)
def extract_mexico_state_cached(lat, lon):
    return extract_mexico_state(lat, lon)

# 调用缓存后的函数
df['mexico_state'] = df.apply(
    lambda row: extract_mexico_state_cached(row['latitude'], row['longitude']),
    axis=1
)

3.2 并行处理(大数据量场景)

用swifter库实现并行化apply,利用多线程提升处理速度:

import swifter

# 缓存+并行处理
df['mexico_state'] = df.swifter.apply(
    lambda row: extract_mexico_state_cached(row['latitude'], row['longitude']),
    axis=1
)

注意事项

  • 先清理数据:提前删除经纬度列的缺失值(df = df.dropna(subset=['latitude', 'longitude'])),避免无效请求。
  • 遵守Nominatim服务规则:不要随意降低min_delay_seconds,否则可能被临时封禁IP。
  • 超大数据量:如果数据量过万,建议改用付费地理编码服务,速度和稳定性更优。

内容的提问来源于stack exchange,提问作者Rafael del Rincón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:12:54