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

如何使用Python读取CSV并基于现有列新增经纬度列写入对应数据

解决代码

直接修改现有代码即可,核心逻辑是先为DataFrame初始化两个空列,循环时给对应行的列赋值,最后统一导出CSV:

import geopy
import pandas as pd
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="sample app")
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")

# 初始化两个新列,默认填充空值
df['Latitude'] = None
df['Longitude'] = None

# 循环时同时获取行索引,方便赋值
for idx, row in df.iterrows():
    try:
        # 如果你确认Address是原表第7列可以保留row[7],更稳妥的写法是用列名row['Address']
        data = geolocator.geocode(row['Address'])
        # 给当前行的经纬度列赋值
        df.at[idx, 'Latitude'] = data.point.latitude
        df.at[idx, 'Longitude'] = data.point.longitude
        print(data.point.latitude, data.point.longitude)
    except AttributeError:
        # 解析失败时可填NaN或者自定义标记
        df.at[idx, 'Latitude'] = '解析失败'
        df.at[idx, 'Longitude'] = '解析失败'
        print('error')

# 导出为新CSV,也可以写原路径直接覆盖原文件
df.to_csv(r"C:\Users\Desktop\LatLongTest_WithCoord.csv", index=False, encoding='utf-8-sig')
关键修改说明
  • 循环改用iterrows()可以同时拿到当前行的索引,方便精准给DataFrame的对应位置赋值
  • 用df.at[行索引, 列名]的语法可以直接给指定单元格赋值
  • 导出时加encoding='utf-8-sig'是为了兼容Excel打开中文不会乱码,无中文场景可以删除
  • 如果你确定你的地址字段在原表的第7列,把row['Address']改回row[7]即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:02