Python循环处理两个CSV文件计算坐标距离输出合并结果
现有代码问题
- 循环内部重复创建空DataFrame并覆盖写入
ctlg.csv,最终仅保留最后一次计算结果 - 未将距离值追加到原始catalog数据集对应行,未保留原始数据
- 双重
iterrows遍历性能差,数据量较大时运行效率极低
修改后可运行代码
import pandas as pd import geopy.distance # 读取原始数据 ctlg = pd.read_csv('catalog.csv', sep=',') sts = pd.read_csv('station.csv', sep=',') # 遍历每个站点,批量计算所有catalog点到当前站点的距离并追加为新列 for sts_idx, sts_row in sts.iterrows(): # 请替换为你station.csv中实际的经纬度列名,用列名取值比列索引更稳定 sts_lat, sts_lon = sts_row['latitude'], sts_row['longitude'] ctlg[f'distance_sts{sts_idx+1}'] = ctlg.apply( # 示例默认返回公里数值,要获取米为单位可将.km修改为.m lambda x: geopy.distance.distance((x['latitude'], x['longitude']), (sts_lat, sts_lon)).km, axis=1 ) # 所有列计算完成后一次性导出,保留全部原始字段+新增距离列 ctlg.to_csv('ctlg.csv', index=False, encoding='utf-8-sig')
补充说明
- 代码默认保留catalog.csv所有原始列,新增的29个距离列会按站点顺序依次追加,完全匹配你需要的列结构
- 如果station.csv中存在站点名称字段,可将距离列名替换为站点名称,可读性更强
内容的提问来源于stack exchange,提问作者Francesco Alexandr Colosimo
相关产品推荐
相关产品推荐

