iterrows ループで pandas データフレームの値を更新する [重複] 質問する

iterrows ループで pandas データフレームの値を更新する [重複] 質問する

私は、場所の住所に必要な 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が、いつものように、パフォーマンスとコーディングの容易さのトレードオフをどのように行うかはあなた次第です。

おすすめ記事