引自手把手教你用Python替代Mapinfo,更快查找两张表中距离最近的点 - 知乎
1、读取需要处理的Excel文件
2、根据两点经纬度计算距离;利用pandas库读库两张表的内容
3、利用For循环对两张表的内容循环读取,通过if判断保留最近的距离点数据
4、保存结果;使用to_excel,将得到的最近点数据保存到Excel中
项目实现:
1、第一步导入需要的库
import pandas as pd import xlrd import os
2、第二步选择并读取要处理的Excel文件
path="D:/a/" #获取文件夹下所有EXCEL名 bb = path + 'result.xlsx' writer = pd.ExcelWriter(bb,engine='openpyxl') xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")] # 获取第一个EXCEL名 xlsx_names1 = xlsx_names[0] aa = path + xlsx_names1 #打开第一个EXCEL first_file_fh=xlrd.open_workbook(aa) # 获取SHEET名 first_file_sheet=first_file_fh.sheets()
3、第三步循环计算并保存最近一个点的数据
for i in range(h1): w1=df1.loc[i,'纬度'] j1 = df1.loc[i,'经度'] d1 = df1.loc[i, :] d0=10000000000000000000000000.0000 print("原小区第%d个。" %(i+1)) test_dict = {'距离': [d0]} d3 = pd.DataFrame(test_dict) for l in range(h2): w2=df2.loc[l, '纬度'] j2=df2.loc[l,'经度'] d=haversine(j1, w1, j2, w2) if d<d0: d0=d d2 = df2.loc[l, :] test_dict = {'距离': [d0]} d3 = pd.DataFrame(test_dict) else:continue
4、第四步保存计算后的文件
resultdata1.to_excel(excel_writer=writer, sheet_name='原小区', encoding="utf-8", index=False) resultdata2.to_excel(excel_writer=writer, sheet_name='最近小区', encoding="utf-8", index=False) resultdata3.to_excel(excel_writer=writer, sheet_name='距离', encoding="utf-8", index=False) writer.save() writer.close()