私は、場所の住所に必要な xy 座標をスクリーン スクレイピングするために使用するジオコーディング作業を行っていますselenium
。xls ファイルを pandas データフレームにインポートし、明示的なループを使用して、以下のように 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 を反復処理した後、この関数が「取得」しないのはなぜですか?iterrows
編集用のコピーではなくビューのみが提供されることは十分承知していますが、実際に行ごとに値を更新したい場合はどうなりますか?lambda
実行可能ですか?
ベストアンサー1
取得する行は、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
が、いつものように、パフォーマンスとコーディングの容易さのトレードオフをどのように行うかはあなた次第です。