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