場所の住所に必要なxy座標をスクレイピングするためにSelenium
を使用したジオコーディング作業を行っています。xlsファイルをpandaデータフレームにインポートし、明示的なループを使用して行を更新しません以下のようなxy座標を持ちます:
for index, row in rche_df.iterrows():
if isinstance(row.wgs1984_latitude, float):
row = row.copy()
target = row.address_chi
dict_temp = geocoding(target)
row.wgs1984_latitude = dict_temp['lat']
row.wgs1984_longitude = dict_temp['long']
なぜpandas DataFrame? を繰り返した後にこの関数が「取得しない」のか、そしてiterrowがビューではなくビューのみを提供することを十分に認識している編集用にコピーしますが、実際に行ごとに値を更新するにはどうすればよいですか?lambda
は実行可能ですか?
iterrows
から返される行は、元のデータフレームに接続されなくなったコピーなので、編集してもデータフレームは変更されません。ありがたいことに、iterrows
から取得した各項目には現在のインデックスが含まれているため、それを使用してデータフレームの関連する行にアクセスして編集できます。
for index, row in rche_df.iterrows():
if isinstance(row.wgs1984_latitude, float):
row = row.copy()
target = row.address_chi
dict_temp = geocoding(target)
rche_df.loc[index, 'wgs1984_latitude'] = dict_temp['lat']
rche_df.loc[index, 'wgs1984_longitude'] = dict_temp['long']
私の経験では、このアプローチはapply
やmap
のようなアプローチを使用するよりも遅いように見えますが、いつものように、パフォーマンスとコーディングの容易さのトレードオフを決めるのはあなた次第です。