Опитвам се да преобразувам някои адресикоординира в информационна рамка, използвайки GeoPy. Някои адреси не са валидни, но не знам кои от тях. Затова имам нужда от библиотеката да пропусне тези, които не са валидни или да ги променят Null
или поне raise
точното поле, което е неправилно.
Следните работи са добре:
import pandas as pd
import geopy
from geopy.geocoders import Nominatim
geolocator = Nominatim()
df = pd.DataFrame({"city": ["south hampton", "north park"]})
df["CityCoordinates"] = df["city"].apply(geolocator.geocode,timeout=1000000).apply(lambda x: (x.latitude, x.longitude))
Но в момента, когато има невалиден адрес, всичко се нарушава:
df = pd.DataFrame({"city": ["south hampton", "Southhamfdjhfdjhfgjgf", "north park"]})
df["CityCoordinates"] = df["city"].apply(geolocator.geocode, timeout=1000000).apply(lambda x: (x.latitude, x.longitude))
Други библиотеки като Geocoder също не могат да се справят с изключенията. Ламбда изглежда не позволява обработка на грешки.
Как мога да се справя с това с обработката на изключения.
Отговори:
1 за отговор № 1Можете да се обадите на друга функция от вашата ламбда, която може да направи грешка работа:
df = pd.DataFrame({"city": ["south hampton", "Southhamfdjhfdjhfgjgf", "north park"]})
def eval_results(x):
try:
return (x.latitude, x.longitude)
except:
return (None, None)
df["CityCoordinates"] = df["city"].apply(geolocator.geocode, timeout=1000000).apply(lambda x: eval_results(x))
Резултатът е нещо подобно:
0 (42.8809229, -70.9625558)
1 (None, None)
2 (32.7408842, -117.1305876)