成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你用Python替代Mapinfo更快查找兩張表中距離最近的點

開發 后端
本文介紹了如何利用Python計算兩個經緯度點間的距離,并在兩張表間進行最近點計算,這本來是Mapinfo的分內之事,但數據量大時就處理不動了,Python處理速度快,還能對數據進行預處理,正是由于可以自己優化代碼,可以無限提高運行速度,比如數據切塊處理。

[[387827]]

 一、前言

大家好,我是崔艷飛。工作中有時需要把A表中的經緯度點,從B表中匹配一個最近的點出來,用Mapinfo也可以實現,但處理速度慢,特別是數據量大時根本處理不動,此時用Python就能輕松實現,還能顯示處理進度,詳細如下。

二、項目目標

用Python實現兩張表間最近點的計算。

三、項目準備

軟件:PyCharm

需要的庫:pandas, xlrd,os

四、項目分析

1)如何選擇并讀取要處理的Excel文件?

利用os、xlrd,選擇要讀取處理的Excel文件。

2)如何計算兩個經緯度點的距離?

利用pandas庫讀取兩張表的內容,再定義函數計算兩個經緯度點的距離。

3)如何循環計算并保存最近一個點的數據?

利用For循環,對兩張表的內容進行循環讀取,通過If判斷保留最近的距離點數據。

4)如何保存結果?

利用to_excel保存,得到最近點的數據。

五、項目實現

1、第一步導入需要的庫

  1. import pandas as pd 
  2. import xlrd 
  3. import os 

2、第二步選擇并讀取要處理的Excel文件

  1. path="D:/a/" 
  2.    #獲取文件夾下所有EXCEL名 
  3.    bb = path + 'result.xlsx' 
  4.    writer = pd.ExcelWriter(bb,engine='openpyxl'
  5.    xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")] 
  6.    # 獲取第一個EXCEL名 
  7.    xlsx_names1 = xlsx_names[0] 
  8.    aa = path + xlsx_names1 
  9.    #打開第一個EXCEL 
  10.    first_file_fh=xlrd.open_workbook(aa) 
  11.    # 獲取SHEET名 
  12.    first_file_sheet=first_file_fh.sheets() 

3、第三步循環計算并保存最近一個點的數據

  1. for i in range(h1): 
  2.      w1=df1.loc[i,'緯度'
  3.      j1 = df1.loc[i,'經度'
  4.      d1 = df1.loc[i, :] 
  5.      d0=10000000000000000000000000.0000 
  6.      print("原小區第%d個。" %(i+1)) 
  7.      test_dict = {'距離': [d0]} 
  8.      d3 = pd.DataFrame(test_dict) 
  9.  
  10.      for l in range(h2): 
  11.          w2=df2.loc[l, '緯度'
  12.          j2=df2.loc[l,'經度'
  13.          d=haversine(j1, w1, j2, w2) 
  14.          if d<d0: 
  15.              d0=d 
  16.              d2 = df2.loc[l, :] 
  17.              test_dict = {'距離': [d0]} 
  18.              d3 = pd.DataFrame(test_dict) 
  19.          else:continue 

4、第四步保存計算后的文件

  1. resultdata1.to_excel(excel_writer=writer, sheet_name='原小區', encoding="utf-8"index=False
  2. resultdata2.to_excel(excel_writer=writer, sheet_name='最近小區', encoding="utf-8"index=False
  3. resultdata3.to_excel(excel_writer=writer, sheet_name='距離', encoding="utf-8"index=False
  4. writer.save() 
  5. writer.close() 

六、效果展示

1、處理前數據:

2、處理進度顯示:

3、處理結果:

七、總結

本文介紹了如何利用Python計算兩個經緯度點間的距離,并在兩張表間進行最近點計算,這本來是Mapinfo的分內之事,但數據量大時就處理不動了,Python處理速度快,還能對數據進行預處理,正是由于可以自己優化代碼,可以無限提高運行速度,比如數據切塊處理,有興趣的同學可以進一步研究下。

 

責任編輯:姜華 來源: Python爬蟲與數據挖掘
相關推薦

2021-12-11 20:20:19

Python算法線性

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-02-02 13:31:35

Pycharm系統技巧Python

2021-05-10 06:48:11

Python騰訊招聘

2022-08-04 10:39:23

Jenkins集成CD

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數據pandas數據分析

2021-05-08 08:04:05

Python爬取素材

2025-06-13 08:26:08

JetpackCompose按鈕

2009-04-22 09:17:19

LINQSQL基礎

2021-05-17 21:30:06

Python求均值中值

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-03-23 09:05:52

PythonExcelVlookup

2012-01-11 13:40:35

移動應用云服務

2021-08-02 23:15:20

Pandas數據采集

2020-03-08 22:06:16

Python數據IP

2021-01-21 09:10:29

ECharts柱狀圖大數據

2021-01-08 10:32:24

Charts折線圖數據可視化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂成人国产精品一区 | 午夜激情小视频 | 成人久久18免费网站 | 亚洲在线视频 | 免费一区二区 | 久久久久国产精品 | 亚洲a视频| 国产一区二区三区欧美 | 古典武侠第一页久久777 | 日韩欧美国产一区二区三区 | 国产男女猛烈无遮掩视频免费网站 | 国产精品久久久久久久久 | 性高朝久久久久久久3小时 av一区二区三区四区 | 欧美一a | 国产精品99久久久久久人 | 国产视频一区在线 | 日日夜夜影院 | 作爱视频免费看 | 韩日在线| 午夜影院 | 伊人久久综合 | 国产综合久久久久久鬼色 | 欧美舔穴 | 色男人的天堂 | 国产一区二区三区免费 | av免费看片 | 日韩av一区二区在线观看 | 亚洲精品久久久久久久久久吃药 | 北条麻妃av一区二区三区 | 国产一区二区精品 | 日韩一区二区免费视频 | 不卡欧美| 一本一道久久a久久精品蜜桃 | 中文字幕免费在线 | 国产精品国产精品国产专区不卡 | 国产精品亚洲一区二区三区在线 | 中文字幕国产精品 | 亚洲乱码国产乱码精品精的特点 | 午夜国产一级片 | 午夜欧美| 精品欧美一区二区三区久久久 |