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

Pandas调用reverse-geocoder逆地理编码时结果全被最后一条覆盖求助

问题原因
  • 核心错误是循环内的赋值逻辑错误:执行df["city"] = i["name"]、df["state"] = i["admin1"]这类语句时,是对DataFrame的整列做统一赋值,而非给当前遍历的对应行赋值。每一轮循环都会覆盖全列所有行的已有结果,最终全列都会保留最后一次循环的赋值结果,所以才会出现所有行的结果都和第二条一致的情况。
  • 其次遍历过程没有和行索引绑定,你拿到了当前行的经纬度查询结果,但没有匹配回对应的行位置,自然无法正确写入对应单元格。
百万级数据高效处理方案

reverse-geocoder的rg.search()方法原生支持直接传入经纬度元组组成的列表做批量查询,底层基于k-d树实现离线查询,性能远高于逐行调用,完全可以支撑百万级数据的处理需求,批量处理100万条数据通常仅需几秒到几十秒即可完成。

你可以直接用如下代码实现全量处理,无需逐行循环:

import pandas as pd
import reverse_geocoder as rg

# 读取原始数据
df = pd.read_csv('reverse.csv')

# 批量查询所有经纬度的逆地理编码结果
geo_results = rg.search(list(zip(df['lat'], df['long'])))

# 将查询结果转为DataFrame,重命名列后和原表合并
geo_df = pd.DataFrame(geo_results)[['name', 'admin1', 'cc']]
geo_df.columns = ['city', 'state', 'country']
df = pd.concat([df, geo_df], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03