Pandas iterrows() 시 주의점

I'm Cape·2023년 5월 23일
0

제로베이스 데이터 취업 스쿨 4주차 스터디노트 2호

판다스쉑... 이런 삽질을 시키다니

이슈

# 문제의 코드
for idx, row in df.iterrows():
    selected = api_data[idx]
    row["lat"], row["lng"] = get_coordinates(selected)
    row["test"] = get_address(selected)

lat, lng column은 정상적으로 값이 들어가고,
test에는 값이 들어가지 않는 것을 볼 수 있다.

해결

공식문서 링크
"You should never modify something you are iterating over. This is not guaranteed to work in all cases. Depending on the data types, the iterator returns a copy and not a view, and writing to it will have no effect."

for idx, row in df.iterrows():
    selected = api_data[idx]
    df.loc[idx, "lat"], df.loc[idx, "lng"] = get_coordinates(selected)
    df.loc[idx, "test"] = get_address(selected)

썩 마음에 드는 해결책은 아니다.
iterating 항목에 대해 변경을 하는 것이 아닌,
iterating 대상 데이터를 가져와서 수정을 가해야 하기 때문에,

음... 뭐랄까 관리 scope가 확장되는 기분?
함수 작성 시 side effect가 나지 않을까? 하는 추상적인 기분...

암튼 새로 하나 배웠다.ㅎㅎ

profile
Impact

0개의 댓글