从 Dataframe 中删除 (' or [] ) insert turfpy
Removing (' or [] ) from Dataframe insert turfpy
我在 Dataframe 中有数据,但是当在函数中使用所述数据时,它不会让我这样做,因为 Dataframe 中的所有内容周围都有 [],导出时意味着 Items 周围有 ''
print df_total
index Observation Date Reporting Date Name E-Mail Profile-ID ... Subregion Latitude Longitude Elevation Incline Aspect
0 0 [2021-04-25 11:00] [2021-04-26 19:34] [Robert Kniewasser] [rkniewasser@petzl.com] [15444] ... [Nordalpen] [47.64627] [14.19269] [2160m] [35°] [N]
1 1 [2021-03-25 09:30] [2021-03-25 19:04] [Herbert K. / Winter C.] [herbert.kerbl@aon.at] [15155] ... [Voralpen] [47.80251] [14.36570] [1420m] [42°] [NE]
我试过了:
df_total['Latitude'] = df_total['Latitude'].str.get(0)
df_total['Latitude'] = df_total['Latitude'].str[0]
df_total['Latitude'] = df_total['Latitude'].str.strip('[]').astype(float)
问题所在:
print([df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']])
[['47.64627'], ['14.19269']]
我需要删除 ('' 和 [])
我正在尝试将数据导入 turfpy 函数,但它无法与 ''
一起使用
raise ValueError("%r is not a JSON compliant number" % coord)
ValueError: '47.64627' is not a JSON compliant number
.
f1 = Feature(geometry=Point([df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']]))
应该等于
f1 = Feature(geometry=Point([47.64627, 14.19269]))
测试代码在这里:
from logging import log
import string
from pandas.core.frame import DataFrame
from pandas.io.formats.format import DataFrameFormatter
from selenium import webdriver
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import webdriver_manager
from webdriver_manager.chrome import ChromeDriverManager
from numpy.core.fromnumeric import var
from numpy.lib.utils import source
import pandas as pd
from pandas.core.indexing import check_bool_indexer
import os
import re
dir_list = os.listdir()
print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
print(info_date)
print(info_reporting_date)
print(info_name)
print(info_email)
print(info_id)
print(info_location)
print(info_country)
print(info_region)
print(info_subregion)
print(info_latitude)
print(info_longitude)
print(info_elevation)
print(info_incline)
print(info_aspect)
print(lst)
data_entry_date = [info_date]
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = [info_reporting_date]
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = [info_name]
lst_total_info_name.append(data_entry_name)
data_entry_email = [info_email]
lst_total_info_email.append(data_entry_email)
data_entry_id = [info_id]
lst_total_info_id.append(data_entry_id)
data_entry_location = [info_location]
lst_total_info_location.append(data_entry_location)
data_entry_country = [info_country]
lst_total_info_country.append(data_entry_country)
data_entry_region = [info_region]
lst_total_info_region.append(data_entry_region)
data_entry_subregion = [info_subregion]
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = [info_latitude]
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = [info_longitude]
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = [info_elevation]
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = [info_incline]
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = [info_aspect]
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect', ]
print(df0)
# Build Dataframe
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect', ]
print(df)
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
print(df_total)
# print(lst_total_observation, lst_total_reporting, lst_total_name, lst_total_email,
# lst_total_profile, lst_total_place, lst_total_region, lst_total_location,
# lst_total_elevation, lst_total_incline, lst_total_aspect, lst_total_latitude, lst_total_longitude)
search_input_lang_long = '47.6236, 14.346'
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
f1_lat_long = [float(df_total.at[0, 'Latitude'][0]), float(df_total.at[0, 'Longitude'][0])]
print(f1_lat_long)
f2_lat_long = [float(df_total.at[1, 'Latitude'][0]), float(df_total.at[1, 'Longitude'][0])]
print(f2_lat_long)
f1 = Feature(geometry=Point(f1_lat_long))
f2 = Feature(geometry=Point(f2_lat_long))
f3 = Feature(geometry=Point([df_total.at[2, 'Latitude'], df_total.at[2, 'Longitude']]))
f4 = Feature(geometry=Point([df_total.at[3, 'Latitude'], df_total.at[3, 'Longitude']]))
f5 = Feature(geometry=Point([df_total.at[3, 'Latitude'], df_total.at[3, 'Longitude']]))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
编辑-------------------------------- -
按照下面所述实施修复后:
测试代码现在看起来像这样:
from logging import log
import string
from geojson.geometry import Geometry
from pandas.core.frame import DataFrame
from pandas.io.formats.format import DataFrameFormatter
from selenium import webdriver
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import webdriver_manager
from webdriver_manager.chrome import ChromeDriverManager
from numpy.core.fromnumeric import var
from numpy.lib.utils import source
import pandas as pd
from pandas.core.indexing import check_bool_indexer
import os
import re
dir_list = os.listdir()
print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
print(info_date)
print(info_reporting_date)
print(info_name)
print(info_email)
print(info_id)
print(info_location)
print(info_country)
print(info_region)
print(info_subregion)
print(info_latitude)
print(info_longitude)
print(info_elevation)
print(info_incline)
print(info_aspect)
print(lst)
data_entry_date = info_date
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = info_reporting_date
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = info_name
lst_total_info_name.append(data_entry_name)
data_entry_email = info_email
lst_total_info_email.append(data_entry_email)
data_entry_id = info_id
lst_total_info_id.append(data_entry_id)
data_entry_location = info_location
lst_total_info_location.append(data_entry_location)
data_entry_country = info_country
lst_total_info_country.append(data_entry_country)
data_entry_region = info_region
lst_total_info_region.append(data_entry_region)
data_entry_subregion = info_subregion
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = info_latitude
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = info_longitude
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = info_elevation
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = info_incline
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = info_aspect
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
print(df0)
print(df0.dtypes)
# Build Dataframe with Website data
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
print(df)
# Initialize Dataframe combined 0 and Data
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
print(df_total)
# Dataframe with lat_long
df_lat_long = pd.DataFrame(df_total['Latitude'].astype(str) + ', ' + df_total['Longitude'].astype(str))
df_lat_long.columns = ['lat_long']
print(df_lat_long)
# print(lst_total_observation, lst_total_reporting, lst_total_name, lst_total_email,
# lst_total_profile, lst_total_place, lst_total_region, lst_total_location,
# lst_total_elevation, lst_total_incline, lst_total_aspect, lst_total_latitude, lst_total_longitude)
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
f1 = Feature(geometry=Point(df_lat_long.at[0, 'lat_long']))
f2 = Feature(geometry=Point(df_lat_long.at[1, 'lat_long']))
f3 = Feature(geometry=Point(df_lat_long.at[2, 'lat_long']))
f4 = Feature(geometry=Point(df_lat_long.at[3, 'lat_long']))
f5 = Feature(geometry=Point(df_lat_long.at[4, 'lat_long']))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
我收到一个新的错误输出,如下所示:
Traceback (most recent call last):
File "c:\Users\Green\Dropbox\Coding\Skitouring_app\Lawis.at_TESTING.py", line 252, in <module>
f1 = Feature(geometry=Point(df_lat_long.at[0, 'lat_long']))
File "C:\Users\Green\AppData\Local\Programs\Python\Python39\lib\site-packages\geojson\geometry.py", line 31, in __init__
self["coordinates"] = self.clean_coordinates(
File "C:\Users\Green\AppData\Local\Programs\Python\Python39\lib\site-packages\geojson\geometry.py", line 55, in clean_coordinates
raise ValueError("%r is not a JSON compliant number" % coord)
ValueError: '4' is not a JSON compliant number
紫色 enter link description here
Turfpy 示例代码
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
f1 = Feature(geometry=Point([28.96991729736328,41.01190001748873]))
f2 = Feature(geometry=Point([28.948459, 41.024204]))
f3 = Feature(geometry=Point([28.938674, 41.013324]))
fc = FeatureCollection([f1, f2 ,f3])
t = Feature(geometry=Point([28.973865, 41.011122]))
print(json.dumps(nearest_point(t ,fc), indent=2, sort_keys=True))
之所以有很多0.0坐标是因为我需要它的工作方式:
简而言之,我从网站获得的数据行数取决于我何时 运行 代码/网站中有多少条目。由于 turfpy 仅适用于一定数量的变量(f1、f2、f3 等),我需要一种方法来拥有固定的预设数量的变量。我知道它不会在网站上获得超过 100 个条目。所以我虽然可以用网站上的数据制作一个 Dataframe,然后用 '0.0' 附加另一个并将它们用作 turfpy 的变量。 (所以我总是有 100 行有数据,即使它只是很多 0.0s)。最近的点永远不会是 lat 0.0 long 0.0,它总是来自网站的某个点。
如果[[df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']]
适合你,你可以这样做:
[float(df_total.at[0, 'Latitude'][0]), float(df_total.at[0, 'Longitude'][0])]
输出:[47.64627, 14.19269]
我不知道这是否有效,但试试看:
df_total['Latitude'] = [str(s).replace('[','') for s in df_total['Latitude']
df_total['Latitude'] = [str(s).replace("'","") for s in df_total['Latitude']
你有这样的行...
data_entry_latitude = [info_latitude]
应该是...
data_entry_latitude = info_latitude
我可能搞砸了你的 webdriver.Chrome()
位,但如果你需要路径 - 我已经将文件放在与脚本相同的目录中)。然而...
尝试:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import os
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
dir_list = os.listdir()
# print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome()
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
# driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
# print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
# print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
# print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
# print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
data_entry_date = info_date
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = info_reporting_date
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = info_name
lst_total_info_name.append(data_entry_name)
data_entry_email = info_email
lst_total_info_email.append(data_entry_email)
data_entry_id = info_id
lst_total_info_id.append(data_entry_id)
data_entry_location = info_location
lst_total_info_location.append(data_entry_location)
data_entry_country = info_country
lst_total_info_country.append(data_entry_country)
data_entry_region = info_region
lst_total_info_region.append(data_entry_region)
data_entry_subregion = info_subregion
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = info_latitude
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = info_longitude
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = info_elevation
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = info_incline
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = info_aspect
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
driver.close()
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
# print(df0)
# print(df0.dtypes)
# Build Dataframe with Website data
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
# print(df)
# Initialize Dataframe combined 0 and Data
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
# print(df_total)
df_total['Latitude'] = df_total['Latitude'].astype(float)
df_total['Longitude'] = df_total['Longitude'].astype(float)
df_total['lat_lon'] = list(zip(df_total['Latitude'], df_total['Longitude']))
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
c = df_total.loc[0:4, 'lat_lon'].to_list()
f1 = Feature(geometry=Point(c[0]))
f2 = Feature(geometry=Point(c[1]))
f3 = Feature(geometry=Point(c[2]))
f4 = Feature(geometry=Point(c[3]))
f5 = Feature(geometry=Point(c[4]))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
输出:
{
"geometry": {
"coordinates": [
47.64627,
14.19269
],
"type": "Point"
},
"properties": {
"distanceToPoint": 17.221480383420726,
"featureIndex": 0
},
"type": "Feature"
}
如果您希望该部分 'drop into' 您现有的代码,只需在此处复制末尾的位即可:
df_total['Latitude'] = df_total['Latitude'].astype(float)
df_total['Longitude'] = df_total['Longitude'].astype(float)
df_total['lat_lon'] = list(zip(df_total['Latitude'], df_total['Longitude']))
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
c = df_total.loc[0:4, 'lat_lon'].to_list()
f1 = Feature(geometry=Point(c[0]))
f2 = Feature(geometry=Point(c[1]))
f3 = Feature(geometry=Point(c[2]))
f4 = Feature(geometry=Point(c[3]))
f5 = Feature(geometry=Point(c[4]))
我在 Dataframe 中有数据,但是当在函数中使用所述数据时,它不会让我这样做,因为 Dataframe 中的所有内容周围都有 [],导出时意味着 Items 周围有 ''
print df_total
index Observation Date Reporting Date Name E-Mail Profile-ID ... Subregion Latitude Longitude Elevation Incline Aspect
0 0 [2021-04-25 11:00] [2021-04-26 19:34] [Robert Kniewasser] [rkniewasser@petzl.com] [15444] ... [Nordalpen] [47.64627] [14.19269] [2160m] [35°] [N]
1 1 [2021-03-25 09:30] [2021-03-25 19:04] [Herbert K. / Winter C.] [herbert.kerbl@aon.at] [15155] ... [Voralpen] [47.80251] [14.36570] [1420m] [42°] [NE]
我试过了:
df_total['Latitude'] = df_total['Latitude'].str.get(0)
df_total['Latitude'] = df_total['Latitude'].str[0]
df_total['Latitude'] = df_total['Latitude'].str.strip('[]').astype(float)
问题所在:
print([df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']])
[['47.64627'], ['14.19269']]
我需要删除 ('' 和 [])
我正在尝试将数据导入 turfpy 函数,但它无法与 ''
一起使用raise ValueError("%r is not a JSON compliant number" % coord)
ValueError: '47.64627' is not a JSON compliant number
.
f1 = Feature(geometry=Point([df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']]))
应该等于
f1 = Feature(geometry=Point([47.64627, 14.19269]))
测试代码在这里:
from logging import log
import string
from pandas.core.frame import DataFrame
from pandas.io.formats.format import DataFrameFormatter
from selenium import webdriver
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import webdriver_manager
from webdriver_manager.chrome import ChromeDriverManager
from numpy.core.fromnumeric import var
from numpy.lib.utils import source
import pandas as pd
from pandas.core.indexing import check_bool_indexer
import os
import re
dir_list = os.listdir()
print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
print(info_date)
print(info_reporting_date)
print(info_name)
print(info_email)
print(info_id)
print(info_location)
print(info_country)
print(info_region)
print(info_subregion)
print(info_latitude)
print(info_longitude)
print(info_elevation)
print(info_incline)
print(info_aspect)
print(lst)
data_entry_date = [info_date]
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = [info_reporting_date]
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = [info_name]
lst_total_info_name.append(data_entry_name)
data_entry_email = [info_email]
lst_total_info_email.append(data_entry_email)
data_entry_id = [info_id]
lst_total_info_id.append(data_entry_id)
data_entry_location = [info_location]
lst_total_info_location.append(data_entry_location)
data_entry_country = [info_country]
lst_total_info_country.append(data_entry_country)
data_entry_region = [info_region]
lst_total_info_region.append(data_entry_region)
data_entry_subregion = [info_subregion]
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = [info_latitude]
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = [info_longitude]
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = [info_elevation]
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = [info_incline]
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = [info_aspect]
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect', ]
print(df0)
# Build Dataframe
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect', ]
print(df)
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
print(df_total)
# print(lst_total_observation, lst_total_reporting, lst_total_name, lst_total_email,
# lst_total_profile, lst_total_place, lst_total_region, lst_total_location,
# lst_total_elevation, lst_total_incline, lst_total_aspect, lst_total_latitude, lst_total_longitude)
search_input_lang_long = '47.6236, 14.346'
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
f1_lat_long = [float(df_total.at[0, 'Latitude'][0]), float(df_total.at[0, 'Longitude'][0])]
print(f1_lat_long)
f2_lat_long = [float(df_total.at[1, 'Latitude'][0]), float(df_total.at[1, 'Longitude'][0])]
print(f2_lat_long)
f1 = Feature(geometry=Point(f1_lat_long))
f2 = Feature(geometry=Point(f2_lat_long))
f3 = Feature(geometry=Point([df_total.at[2, 'Latitude'], df_total.at[2, 'Longitude']]))
f4 = Feature(geometry=Point([df_total.at[3, 'Latitude'], df_total.at[3, 'Longitude']]))
f5 = Feature(geometry=Point([df_total.at[3, 'Latitude'], df_total.at[3, 'Longitude']]))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
编辑-------------------------------- -
按照下面所述实施修复后: 测试代码现在看起来像这样:
from logging import log
import string
from geojson.geometry import Geometry
from pandas.core.frame import DataFrame
from pandas.io.formats.format import DataFrameFormatter
from selenium import webdriver
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import webdriver_manager
from webdriver_manager.chrome import ChromeDriverManager
from numpy.core.fromnumeric import var
from numpy.lib.utils import source
import pandas as pd
from pandas.core.indexing import check_bool_indexer
import os
import re
dir_list = os.listdir()
print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
print(info_date)
print(info_reporting_date)
print(info_name)
print(info_email)
print(info_id)
print(info_location)
print(info_country)
print(info_region)
print(info_subregion)
print(info_latitude)
print(info_longitude)
print(info_elevation)
print(info_incline)
print(info_aspect)
print(lst)
data_entry_date = info_date
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = info_reporting_date
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = info_name
lst_total_info_name.append(data_entry_name)
data_entry_email = info_email
lst_total_info_email.append(data_entry_email)
data_entry_id = info_id
lst_total_info_id.append(data_entry_id)
data_entry_location = info_location
lst_total_info_location.append(data_entry_location)
data_entry_country = info_country
lst_total_info_country.append(data_entry_country)
data_entry_region = info_region
lst_total_info_region.append(data_entry_region)
data_entry_subregion = info_subregion
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = info_latitude
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = info_longitude
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = info_elevation
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = info_incline
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = info_aspect
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
print(df0)
print(df0.dtypes)
# Build Dataframe with Website data
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
print(df)
# Initialize Dataframe combined 0 and Data
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
print(df_total)
# Dataframe with lat_long
df_lat_long = pd.DataFrame(df_total['Latitude'].astype(str) + ', ' + df_total['Longitude'].astype(str))
df_lat_long.columns = ['lat_long']
print(df_lat_long)
# print(lst_total_observation, lst_total_reporting, lst_total_name, lst_total_email,
# lst_total_profile, lst_total_place, lst_total_region, lst_total_location,
# lst_total_elevation, lst_total_incline, lst_total_aspect, lst_total_latitude, lst_total_longitude)
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
f1 = Feature(geometry=Point(df_lat_long.at[0, 'lat_long']))
f2 = Feature(geometry=Point(df_lat_long.at[1, 'lat_long']))
f3 = Feature(geometry=Point(df_lat_long.at[2, 'lat_long']))
f4 = Feature(geometry=Point(df_lat_long.at[3, 'lat_long']))
f5 = Feature(geometry=Point(df_lat_long.at[4, 'lat_long']))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
我收到一个新的错误输出,如下所示:
Traceback (most recent call last):
File "c:\Users\Green\Dropbox\Coding\Skitouring_app\Lawis.at_TESTING.py", line 252, in <module>
f1 = Feature(geometry=Point(df_lat_long.at[0, 'lat_long']))
File "C:\Users\Green\AppData\Local\Programs\Python\Python39\lib\site-packages\geojson\geometry.py", line 31, in __init__
self["coordinates"] = self.clean_coordinates(
File "C:\Users\Green\AppData\Local\Programs\Python\Python39\lib\site-packages\geojson\geometry.py", line 55, in clean_coordinates
raise ValueError("%r is not a JSON compliant number" % coord)
ValueError: '4' is not a JSON compliant number
紫色 enter link description here
Turfpy 示例代码
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
f1 = Feature(geometry=Point([28.96991729736328,41.01190001748873]))
f2 = Feature(geometry=Point([28.948459, 41.024204]))
f3 = Feature(geometry=Point([28.938674, 41.013324]))
fc = FeatureCollection([f1, f2 ,f3])
t = Feature(geometry=Point([28.973865, 41.011122]))
print(json.dumps(nearest_point(t ,fc), indent=2, sort_keys=True))
之所以有很多0.0坐标是因为我需要它的工作方式: 简而言之,我从网站获得的数据行数取决于我何时 运行 代码/网站中有多少条目。由于 turfpy 仅适用于一定数量的变量(f1、f2、f3 等),我需要一种方法来拥有固定的预设数量的变量。我知道它不会在网站上获得超过 100 个条目。所以我虽然可以用网站上的数据制作一个 Dataframe,然后用 '0.0' 附加另一个并将它们用作 turfpy 的变量。 (所以我总是有 100 行有数据,即使它只是很多 0.0s)。最近的点永远不会是 lat 0.0 long 0.0,它总是来自网站的某个点。
如果[[df_total.at[0, 'Latitude'], df_total.at[0, 'Longitude']]
适合你,你可以这样做:
[float(df_total.at[0, 'Latitude'][0]), float(df_total.at[0, 'Longitude'][0])]
输出:[47.64627, 14.19269]
我不知道这是否有效,但试试看:
df_total['Latitude'] = [str(s).replace('[','') for s in df_total['Latitude']
df_total['Latitude'] = [str(s).replace("'","") for s in df_total['Latitude']
你有这样的行...
data_entry_latitude = [info_latitude]
应该是...
data_entry_latitude = info_latitude
我可能搞砸了你的 webdriver.Chrome()
位,但如果你需要路径 - 我已经将文件放在与脚本相同的目录中)。然而...
尝试:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import os
import json
from turfpy.measurement import nearest_point
from geojson import Point, Feature, FeatureCollection
dir_list = os.listdir()
# print(dir_list)
#Functions
def googlepopupaccept():
if WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='L2AGLb']"))):
#driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src, 'consent.google.com')]"))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='L2AGLb']"))).click()
#Chrome Options
options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('window-size=1920x1080')
# options.add_argument("disable-gpu")
options.add_argument("--incognito")
#Search for input in Google accept cookies
driver = webdriver.Chrome()
driver.get("https://www.google.com")
googlepopupaccept()
#Open Lawis
# driver = webdriver.Chrome(executable_path= 'chromedriver.exe', chrome_options=options)
googlemaps = driver.get("https://www.lawis.at")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@title="Profiles"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'//*[@class="button_subnav active"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="filter_set_two"]'))).click()
country_search = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]')))
country_search.click()
country_search.send_keys('Österreich' + Keys.ENTER)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="region_chosen"]'))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//*[@class="chosen-search-input default"]'))).send_keys('Oberösterreich' + Keys.ENTER)
#Button Submit Click and open list to see details
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="filter_down"]/form/div/div[2]/button'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchText"]'))).click()
#Click on each List Item and store data
#Variable subject to loop change +1
url_lawis_list_item0 = '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'
position = 56
#Make list from string
url_lawis_list_item_list = list(url_lawis_list_item0)
# print(url_lawis_list_item_list)
#Changing variable for loop
tobechanged_index = int(url_lawis_list_item_list[position])
#Variable lists of all data entries
lst_total_info_date = []
lst_total_info_reporting_date = []
lst_total_info_name = []
lst_total_info_email = []
lst_total_info_id = []
lst_total_info_location = []
lst_total_info_country = []
lst_total_info_region = []
lst_total_info_subregion = []
lst_total_info_latitude = []
lst_total_info_longitude = []
lst_total_info_elevation = []
lst_total_info_incline = []
lst_total_info_aspect = []
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))).click()
#for testing purposes change while True: to "while tobechanged_index < 3"
while tobechanged_index < 3:
# print(tobechanged_index)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#Change item in list +1
changed_index = int(url_lawis_list_item_list[position]) +1
url_lawis_list_item_list[position] = changed_index
# print(url_lawis_list_item_list)
#make string out of list
empty_string = ""
for i in url_lawis_list_item_list:
empty_string += str(i) + ""
url_lawis_list_item0 = empty_string
# print(url_lawis_list_item0)
tobechanged_index = changed_index
#Make list out of elements
lst = []
info_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_date"]'))).text
lst.append(info_date)
info_reporting_date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_reporting_date"]'))).text
lst.append(info_reporting_date)
info_name = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_name"]'))).text
lst.append(info_name)
info_email = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_email"]'))).text
lst.append(info_email)
info_id = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_id"]'))).text
lst.append(info_id)
info_location = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_location"]'))).text
lst.append(info_location)
info_country = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_country"]'))).text
lst.append(info_country)
info_region = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_region"]'))).text
lst.append(info_region)
info_subregion = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_subregion"]'))).text
lst.append(info_subregion)
info_latitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_latitude"]'))).text
lst.append(info_latitude)
info_longitude = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_longitude"]'))).text
lst.append(info_longitude)
info_elevation = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_seehoehe"]'))).text
lst.append(info_elevation)
info_incline = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_incline"]'))).text
lst.append(info_incline)
info_aspect = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="info_aspect"]'))).text
lst.append(info_aspect)
data_entry_date = info_date
lst_total_info_date.append(data_entry_date)
data_entry__reporting_date = info_reporting_date
lst_total_info_reporting_date.append(data_entry__reporting_date)
data_entry_name = info_name
lst_total_info_name.append(data_entry_name)
data_entry_email = info_email
lst_total_info_email.append(data_entry_email)
data_entry_id = info_id
lst_total_info_id.append(data_entry_id)
data_entry_location = info_location
lst_total_info_location.append(data_entry_location)
data_entry_country = info_country
lst_total_info_country.append(data_entry_country)
data_entry_region = info_region
lst_total_info_region.append(data_entry_region)
data_entry_subregion = info_subregion
lst_total_info_subregion.append(data_entry_subregion)
data_entry_latitude = info_latitude
lst_total_info_latitude.append(data_entry_latitude)
data_entry_longitude = info_longitude
lst_total_info_longitude.append(data_entry_longitude)
data_entry_elevation = info_elevation
lst_total_info_elevation.append(data_entry_elevation)
data_entry_incline = info_incline
lst_total_info_incline.append(data_entry_incline)
data_entry_aspect = info_aspect
lst_total_info_aspect.append(data_entry_aspect)
#Click on column
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, url_lawis_list_item0))).click()
#scroll down once
driver.find_element_by_tag_name('body').send_keys(Keys.DOWN)
driver.close()
#combined list of all data entries for dataframe
lst_total = [lst_total_info_date, lst_total_info_reporting_date, lst_total_info_name, lst_total_info_email, lst_total_info_id,
lst_total_info_location, lst_total_info_country, lst_total_info_region, lst_total_info_subregion, lst_total_info_latitude, lst_total_info_longitude,
lst_total_info_elevation, lst_total_info_incline, lst_total_info_aspect]
# Initialise empty Dataframe with column names
import numpy as np
df0 = pd.DataFrame(np.zeros((100, 14)))
df0.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
# print(df0)
# print(df0.dtypes)
# Build Dataframe with Website data
df = pd.DataFrame(lst_total).transpose()
df.columns = ['Observation Date', 'Reporting Date', 'Name', 'E-Mail', 'Profile-ID', 'Place', 'Country', 'Region', 'Subregion', 'Latitude', 'Longitude', 'Elevation', 'Incline', 'Aspect']
# print(df)
# Initialize Dataframe combined 0 and Data
dataframes = [df, df0]
df_total = pd.concat(dataframes)
df_total = df_total.reset_index()
# print(df_total)
df_total['Latitude'] = df_total['Latitude'].astype(float)
df_total['Longitude'] = df_total['Longitude'].astype(float)
df_total['lat_lon'] = list(zip(df_total['Latitude'], df_total['Longitude']))
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
c = df_total.loc[0:4, 'lat_lon'].to_list()
f1 = Feature(geometry=Point(c[0]))
f2 = Feature(geometry=Point(c[1]))
f3 = Feature(geometry=Point(c[2]))
f4 = Feature(geometry=Point(c[3]))
f5 = Feature(geometry=Point(c[4]))
fc = FeatureCollection([f1, f2, f3, f4, f5])
print(json.dumps(nearest_point(search_input_lang_long ,fc), indent=2, sort_keys=True))
输出:
{
"geometry": {
"coordinates": [
47.64627,
14.19269
],
"type": "Point"
},
"properties": {
"distanceToPoint": 17.221480383420726,
"featureIndex": 0
},
"type": "Feature"
}
如果您希望该部分 'drop into' 您现有的代码,只需在此处复制末尾的位即可:
df_total['Latitude'] = df_total['Latitude'].astype(float)
df_total['Longitude'] = df_total['Longitude'].astype(float)
df_total['lat_lon'] = list(zip(df_total['Latitude'], df_total['Longitude']))
search_input_lang_long = Feature(geometry=Point([47.6236, 14.346]))
c = df_total.loc[0:4, 'lat_lon'].to_list()
f1 = Feature(geometry=Point(c[0]))
f2 = Feature(geometry=Point(c[1]))
f3 = Feature(geometry=Point(c[2]))
f4 = Feature(geometry=Point(c[3]))
f5 = Feature(geometry=Point(c[4]))