결측치를 처리하는 부분에서 어떨 때는, apply()를 사용했고 다른 때는 iterrows()를 사용했다. 그래서 정확하게 알기 위해 기록한다.
우선 가장 핵심은 '왜? apply()를 사용했는지, iterrows()를 사용했는지' 알아야한다. 두 메소드는 데이터를 반복하면서 결측치를 확인하고 값을 처리하기 위해 사용을 했다. 핵심은 결측치의 값을 대처하는데 사용하는 것이다.
그렇다면 각 메소드마다 사용할 용도나 방법이 다르다는 얘기다. 어떨 때 apply() 를 사용해야 좋고, iterrows()를 사용해야 좋을까? 이 부분에 대해서 알아보았다.
train_data['Age'] = train_data.apply(fill_age, axis=1)
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