2016-12-09 6 views
0

GeoPyを使用してデータフレーム内の座標に一部のアドレスを変換しようとしています。一部のアドレスは有効ではありませんが、どのアドレスが有効かわかりません。したがって、私はライブラリが有効でないものをスキップするか、Nullまたは少なくともraiseに間違ったフィールドを変更する必要があります。Python GeoPyエラー処理

次は正常に動作します:

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

あなたは、エラー処理を行うことができ、あなたのラムダから別の関数を呼び出すことができます。

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) 
+0

こんにちは@chrkiはどうもありがとうございました、これはありませんジョブ – Jeff