如何使用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
相关产品推荐
相关产品推荐

