首页 > 解决方案 > 从 Dataframe insert turfpy 中删除 (' 或 [] )

问题描述

我在数据框中有数据,但是当在函数中使用所述数据时,它不会让我这样做,因为数据框中的所有内容都有 [] 在它们周围,当导出时意味着项目在它们周围有 ''

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

Turpy在此处输入链接描述

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,它总是来自网站的某个点。

标签: pythonpandasdataframeformatting

解决方案


你有这样的线条......

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"
}

如果您希望零件“放入”现有代码,只需在此处复制末尾的位:

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]))

推荐阅读