/ / Python GeoPyエラー処理 - Python、エラー処理、座標、ジオコーディング、ジオピー

Python GeoPyエラー処理 - Python、エラー処理、座標、ジオコーディング、ジオピー

私はいくつかのアドレスを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))

ジオコーダーなどの他のライブラリも、例外を処理していないようです。ラムダはエラー処理を許可していないようです。

どのように私は例外処理でこれを回避することができます。

回答:

回答№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)