Обновление значения в iterrow для pandas

Я выполняю некоторую работу по геокодированию, которую использовал selenium для скрининга координаты xy, которая мне нужна для адреса местоположения, я импортировал файл xls в panda dataframe и хочу использовать явный цикл для обновления строк, которые не имеют координаты 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 дает нам представление, а не копию для редактирования, но что, если я действительно обновляю значение row by row? Возможно ли 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, но, как всегда, вам решать, как сделать производительность/легкость компиляции кода.