web-dev-qa-db-ja.com

pandasのiterrowの値を更新しています

場所の住所に必要な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は実行可能ですか?

42
lokheart

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']

私の経験では、このアプローチはapplymapのようなアプローチを使用するよりも遅いように見えますが、いつものように、パフォーマンスとコーディングの容易さのトレードオフを決めるのはあなた次第です。

70
Marius