Геокодирование с помощью Pandas - применяет различное геокодирование к лямбда-x в зависимости от условий - PullRequest
0 голосов
/ 25 апреля 2018

Я пытался выполнить геокодирование, чтобы вытащить почтовые индексы.У меня есть два разных источника данных, примененных к геокодированию.

a.Сначала попробуйте указать адрес, город и страну б.Если ничего не выполнить, попробуйте указать город и страну

Моя программа похожа на приведенную ниже, она отлично работает, если я просто делаю первый подход, но если я хочу объединить оба варианта, это проблематично:

from geopy.geocoders import Nominatim
geolocator = Nominatim()
geolocator=Nominatim(timeout=1000)
import io
import sys
# import urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
import pandas as pd

df = pd.read_csv("Italy.csv", encoding="cp1252") #改变标准输乳的默认编码
# print(df)

df["Conca_1"]=df["country2"]+" " " "+df["City"]+" " " "+df["Address Line 1"]
df["Conca_2"]=df["country2"]+" " " "+df["City"]
# print(df["Conca2"])
df["Coordinates_1"]=df["Conca_1"].apply(geolocator.geocode)
df["Coordinates_2"]=df["Conca_2"].apply(geolocator.geocode)
# df["zip"] = df['Coordinates_1'].apply(lambda x: x[0].split(',')[-2] if x != None else None)
df["zip"] = df['Coordinates_1'].apply(lambda x: x[0].split(',')[-2] if x != None else df['Coordinates_2'].apply(x[0].split(',')[-2] if x != None else None ))
print(df["zip"])

writer = pd.ExcelWriter('coordinates_result.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
writer.save()

1 Ответ

0 голосов
/ 26 апреля 2018

разработано мной

from geopy.geocoders import Nominatim
geolocator = Nominatim()
geolocator=Nominatim(timeout=1000)
import io
import sys
# import urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
import pandas as pd

df = pd.read_csv("1.csv", encoding="cp1252") #改变标准输乳的默认编码
# print(df)

df["Conca_1"]=df["City"]
df["Conca_2"]=df["country2"]+" " " "+df["City"]
# print(df["Conca2"])
df["Coordinates_1"]=df["Conca_1"].apply(geolocator.geocode)
df["Coordinates_2"]=df["Conca_2"].apply(geolocator.geocode)
# df["zip"] = df['Coordinates_1'].apply(lambda x: x[0].split(',')[-2] if x != None else None)

# df["zip"] = df[["Coordinates_1","Coordinates_2"]].apply(lambda x: x["Coordinates_1"][0].split(',')[-2] if x["Coordinates_1"] != None else x["Coordinates_2"][0].split(',')[-2] if x["Coordinates_2"] != None axis = 1)
df["zip"] = df[["Coordinates_1","Coordinates_2"]].apply(lambda x: x["Coordinates_1"][0].split(',')[-2] if x["Coordinates_1"] != None else x["Coordinates_2"][0].split(',')[-2] if x["Coordinates_2"] != None else None, axis = 1)

print(df["zip"])

writer = pd.ExcelWriter('coordinates_result.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
...