來源:Python爬蟲與資料探勘作者:崔豔飛 一、前言大家好,我是崔豔飛。工作中有時需要把A表中的經緯度點,從B表中匹配一個最近的點出來,用Mapinfo也可以實現,但處理速度慢,特別是資料
2021-06-10 16:57:46
來源:Python爬蟲與資料探勘
作者:崔豔飛
一、前言
大家好,我是崔豔飛。工作中有時需要把A表中的經緯度點,從B表中匹配一個最近的點出來,用Mapinfo也可以實現,但處理速度慢,特別是資料量大時根本處理不動,此時用Python就能輕鬆實現,還能顯示處理進度,詳細如下。
二、項目目標
用Python實現兩張表間最近點的計算。
三、項目準備
軟體:PyCharm
需要的庫:pandas, xlrd,os
四、項目分析
1)如何選擇並讀取要處理的Excel檔案?
利用os、xlrd,選擇要讀取處理的Excel檔案。
2)如何計算兩個經緯度點的距離?
利用pandas庫讀取兩張表的內容,再定義函數計算兩個經緯度點的距離。
3)如何迴圈計算並儲存最近一個點的資料?
利用For迴圈,對兩張表的內容進行迴圈讀取,通過If判斷保留最近的距離點資料。
4)如何儲存結果?
利用to_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()
六、效果展示
1、處理前資料:
2、處理進度顯示:
3、處理結果:
七、總結
本文介紹瞭如何利用Python計算兩個經緯度點間的距離,並在兩張表間進行最近點計算,這本來是Mapinfo的分內之事,但資料量大時就處理不動了,Python處理速度快,還能對資料進行預處理,正是由於可以自己優化程式碼,可以無限提高運行速度,比如資料切塊處理,有興趣的同學可以進一步研究下。
相關文章
來源:Python爬蟲與資料探勘作者:崔豔飛 一、前言大家好,我是崔豔飛。工作中有時需要把A表中的經緯度點,從B表中匹配一個最近的點出來,用Mapinfo也可以實現,但處理速度慢,特別是資料
2021-06-10 16:57:46
早在多年前,微信曾在 6.6 版本中推出了一項超級好用的功能,那就是 CallKit 功能,可以實現微信來語音通話的時候,系統顯示和來電介面一樣。不過由於這個功能吃到了某些部門的蛋糕
2021-06-10 16:57:23
今天我們來聊一款高階配置,千元價格的5G智慧機,它效能強大,堪稱旗艦機;外觀設計潮流,不像低端機;充電速度很快,4500mAh大電池,僅僅16分鐘充至50%……這款智慧機就是realme GT Neo。
2021-06-10 16:57:17
微星日來啦DRAGON BOAT FESTIVAL活動時間:6/11 9:30-18:00店鋪地址:太平洋數碼一期二樓287-288微星活動規則一來微星店鋪現場掃碼,回覆「微星日」參與抽獎,領取好禮活動規則二1.
2021-06-10 16:56:27
今年5月11日,英特爾釋出了第十一代酷睿H45移動端處理器。同日,ROG等一眾廠商也都推出了相應產品,今天我們便與大家一起體驗一下ROG幻16筆記本。ROG幻系列筆記本為創意設計以及
2021-06-10 16:36:47
目前的智慧手機市場可謂是百花齊放,各大品牌爭奇鬥豔,消費者擁有非常多的選擇。但是平板電腦市場過去卻始終保持一家獨大的狀態,由於安卓平板在軟體生態上的落後,大多數消費
2021-06-10 16:36:25