如何在Python中使用haversine库计算两组位置的距离矩阵
解决方法
以下是完全不用复杂语法、新手友好的实现步骤,不管你的两个数据集有多少条数据,都可以自动处理不用手动录入位置:
步骤1:导入需要的依赖库
如果还没装haversine,先运行pip install haversine安装即可,之后导入需要的模块:
import pandas as pd from haversine import haversine_vector, Unit
步骤2:读取你的两个位置数据集
默认你已经把两个结构一致的位置表格存为了csv文件,直接替换成你自己的文件路径读取即可:
# 小数据集 df_small = pd.read_csv("你的小数据集文件路径.csv") # 大数据集 df_large = pd.read_csv("你的大数据集文件路径.csv")
步骤3:生成符合函数要求的经纬度列表
用最基础的for循环实现,不需要任何复杂语法:
# 处理小数据集,生成(纬度, 经度)格式的元组列表 list_small = [] for row_index in range(len(df_small)): lat = df_small.loc[row_index, "lat"] lon = df_small.loc[row_index, "long"] list_small.append( (lat, lon) ) # 用同样的逻辑处理大数据集 list_large = [] for row_index in range(len(df_large)): lat = df_large.loc[row_index, "lat"] lon = df_large.loc[row_index, "long"] list_large.append( (lat, lon) )
步骤4:调用函数计算所有两两位置的距离
直接用comb=True参数就能自动计算两个列表所有位置的组合距离,不用手动遍历:
# 结果矩阵的每一行对应小数据集的一个位置,每一列对应大数据集的一个位置,单位为公里 distance_matrix = haversine_vector(list_small, list_large, Unit.KILOMETERS, comb=True)
可选:生成带位置名的直观结果表
如果想要直接查看具体两个地点的距离,可以把结果转成带行列名的表格,还能直接存为本地文件:
# 行名是小数据集的地点名称,列名是大数据集的地点名称 distance_result = pd.DataFrame( distance_matrix, index = df_small["location"].values, columns = df_large["location"].values ) # 打印查看结果 print(distance_result) # 保存为csv文件到本地 distance_result.to_csv("所有位置两两距离结果.csv")
内容的提问来源于stack exchange,提问作者hedsek
相关产品推荐
相关产品推荐

