apply()와 iterrows()의 차이

yulsikogi·2024년 2월 22일
post-thumbnail

결측치를 처리하는 부분에서 어떨 때는, apply()를 사용했고 다른 때는 iterrows()를 사용했다. 그래서 정확하게 알기 위해 기록한다.

우선 가장 핵심은 '왜? apply()를 사용했는지, iterrows()를 사용했는지' 알아야한다. 두 메소드는 데이터를 반복하면서 결측치를 확인하고 값을 처리하기 위해 사용을 했다. 핵심은 결측치의 값을 대처하는데 사용하는 것이다.

그렇다면 각 메소드마다 사용할 용도나 방법이 다르다는 얘기다. 어떨 때 apply() 를 사용해야 좋고, iterrows()를 사용해야 좋을까? 이 부분에 대해서 알아보았다.

1. apply()

  • DataFrame의 모든 행이나 열에 함수를 적용할 때 사용.
  • 주로 새로운 열을 생성하거나, 기존 열의 값을 변환하는데 사용.
  • 주어진 함수를 DataFrame의 각 행이나 열에 독립적으로 적용하고, 그 결과를 새로운 시리즈나 DataFrame으로 반환.
train_data['Age'] = train_data.apply(fill_age, axis=1)

2. iterrows()

  • DataFrame의 각 행을 반복하면서 행의 데이터에 접근할 때 사용.
  • 이 경우, 결측치(NaN)를 확인하고, 특정 조건에 따라 특정 행의 값을 업데이트.
  • 행을 반복하며 조건을 검사하는 데 적합.
  • 특히 at()와 같이 사용하여, 특정 행과 열의 위치에 빠르게 접근하여 값 하나를 읽거나 쓸 때 사용.
for index, row in train_data.iterrows():
    if pd.isna(row['Cabin']):
        assigned_cabin = assign_cabin(row['Pclass'], row['Fare'], average_fares)
        train_data.at[index, 'Cabin'] = assigned_cabin
assign_cabin 함수
  def assign_cabin(pclass, fare, average_fares):
    cabin_order = {
        1: ['B', 'C', 'D', 'E', 'A', 'T'],
        2: ['F', 'D', 'E'],
        3: ['G', 'E', 'F']
    }

    # Pclass에 해당하는 Cabin 순서 가져오기
    cabins = cabin_order[pclass]
    closest_cabin = 'Unknown'
    min_diff = float('inf')

    # 가장 가까운 평균 요금을 가진 Cabin 찾기
    for cabin in cabins:
        if (pclass, cabin) in average_fares:
            cabin_fare = average_fares[(pclass, cabin)]
            diff = abs(fare - cabin_fare)

            if diff < min_diff:
                min_diff = diff
                closest_cabin = cabin

    return closest_cabin

결론

  • apply()는 데이터의 변환에 적합하며, DataFrame 전체에 독립적인 연산을 적용할 때 유용.
  • 반면, iterrows()와 at()는 특정 조건에 따라 개별 행을 수정해야 할 때 더 적합하다.
profile
Let's enjoy it. For me

0개의 댓글