# 나이 50이고 평점 6점인 값 결측치로 처리
df.loc[df['Delivery_person_Age'] == 50, ['Delivery_person_Age', 'Delivery_person_Ratings']] = np.nan
# 위도 1보다 작은 경우 경우 결측치로 처리
df.loc[df['Delivery_location_latitude'] <= 1, ['Restaurant_latitude', 'Restaurant_longitude', 'Delivery_location_latitude', 'Delivery_location_longitude']] = np.nan
# 모든 문자열 'NaN '값 null변경 후 null값 모두 삭제
## 최대한 채워보고 null값 제외하기 vs 그냥 다 drop 하기(약 10% 유실)
df.replace('NaN ', np.nan, inplace=True)
df = df.dropna()
# 드라이버 나이와 평점 숫자형으로 전환
df['Delivery_person_Age'] = df['Delivery_person_Age'].astype('int')
df['Delivery_person_Ratings'] = df['Delivery_person_Ratings'].astype('float')
df[['Delivery_person_Age', 'Delivery_person_Ratings']]
# 드라이버 나이와 평점 평균값으로 대체
df['Delivery_person_Age'] = round(df.groupby('Delivery_person_ID')['Delivery_person_Age'].transform('mean')).astype(int)
df['Delivery_person_Ratings'] = round(df.groupby('Delivery_person_ID')['Delivery_person_Ratings'].transform('mean'), 1)
df[['Delivery_person_ID', 'Delivery_person_Age', 'Delivery_person_Ratings']].head(20).sort_values(by='Delivery_person_ID')
# 위, 경도 절댓값 씌우기
df[['Restaurant_latitude', 'Restaurant_longitude', 'Delivery_location_latitude', 'Delivery_location_longitude']] = \
df[['Restaurant_latitude', 'Restaurant_longitude', 'Delivery_location_latitude', 'Delivery_location_longitude']].abs()
# 날짜 및 시간 통합
df['Time_Ordered'] = df['Order_Date'] + ' ' + df['Time_Orderd']
df['Time_Picked'] = df['Order_Date'] + ' ' + df['Time_Order_picked']
df['Time_Ordered'] = pd.to_datetime(df['Time_Ordered']).dt.strftime('%Y-%m-%d %H:%M:%S')
df['Time_Picked'] = pd.to_datetime(df['Time_Picked']).dt.strftime('%Y-%m-%d %H:%M:%S')
df[['Time_Ordered', 'Time_Picked']]
# datetime형으로 바꿔주기
df['Time_Ordered'] = pd.to_datetime(df['Time_Ordered'])
df['Time_Picked'] = pd.to_datetime(df['Time_Picked'])
이외에는 split()을 통해 불필요한 공백이나 문자열 제거 및 타입변경을 수행