02단계 · 표 다루기 (pandas)
새 열 만들기 — 파생변수
계산·조건·구간으로 새 열을 만들고, 열 이름을 바꾸고 버린다.
먼저 알아볼게요
코드로 이동 ↓df["월급"] = df["연봉"] / 12 처럼 없는 이름에 값을 담으면 새 열이 생긴다. 열끼리의 계산은 행마다 짝을 맞춰 한 번에 된다.
np.where(조건, 참일때, 거짓일때) 는 조건에 따라 두 값 중 하나를 채운다. if 를 행마다 도는 것보다 짧고 빠르다.
pd.cut(값, bins=[...], labels=[...]) 는 숫자를 구간으로 나눠 이름표를 붙인다. bins 는 경계값이고 구간 수보다 하나 많아야 한다.
df.rename(columns={"옛이름": "새이름"}) 은 열 이름을 바꾼다. 앞 단원의 딕셔너리가 여기에 쓰인다.
df.drop(columns=["사번"]) 은 열을 버린다. 2유형에서 ID 처럼 단순 식별자라 예측에 쓸 정보가 없는 열을 떼어 낼 때 자주 쓴다. 식별자는 언제나 버려야 한다는 규칙이 아니라, 그 열이 답에 대한 정보를 담고 있는지 보고 정하는 것이다.
이렇게 써요
import pandas as pd
import numpy as np
df = pd.read_csv("emp.csv")
df["세후"] = (df["연봉"] * 0.92).round(0)
df["장기"] = np.where(df["근속연수"] >= 10, "예", "아니오")
print(df[["연봉", "세후", "장기"]].head(3))기억할 한 가지
없는 열 이름에 값을 담으면 새 열이 생긴다. np.where 와 pd.cut 이 조건·구간 파생의 기본이다.
직접 해보기
emp.csv 에서 ① 월급 열(연봉/12, 소수 1)과 고연봉 열(연봉 6000 이상이면 1) 을 만들고 고연봉 의 합 ② 연봉 을 [0,4000,6000,10000] 경계로 하/중/상 구간을 만들어 구간 순서대로 개수 ③ 월급 을 월급여 로 바꾼 뒤 마지막 세 열 이름 ④ 사번 을 버린 뒤 열 개수를 출력하세요.
제공 파일 1개 · 내용 보기
파일은 준비되어 있어요. 코드에서 이름으로 불러오세요.
emp.csv
사번,이름,부서,직급,연봉,근속연수,고객만족도,입사일 1001,김서준,인사,사원,3230,2,3.8,2024-08-28 1002,이지우,인사,사원,4083,3,4.2,2023-07-26 1003,박도윤,인사,사원,3222,1,3.4,2025-09-24 1004,최하은,지원,부장,7395,18,4.6,2008-06-09 1005,정예준,영업,부장,8075,17,,2009-05-20 1006,강수아,인사,부장,7466,18,4.7,2008-06-01 1007,조민준,지원,대리,4558,5,4.7,2021-01-28 1008,윤지아,영업,과장,5796,,4.6,2015-04-13 1009,장시우,지원,과장,5878,13,4.6,2013-12-15 1010,임하윤,지원,대리,4686,9,3.3,2017-05-19 1011,한도현,지원,부장,7426,20,4.3,2006-07-27 1012,오채원,영업,사원,3545,4,,2022-06-25 1013,신건우,영업,사원,3724,1,3.8,2025-02-19 1014,권서연,영업,대리,4327,7,3.2,2019-05-06 1015,황준서,개발,부장,7732,21,4.7,2005-05-13 1016,안다은,영업,사원,3823,4,4.2,2022-01-13 1017,송지호,개발,부장,7262,19,4.4,2007-07-27 1018,전유진,지원,과장,6006,15,3.6,2011-03-16 1019,홍현우,개발,과장,5806,14,4.7,2012-10-17 1020,문소율,지원,사원,4008,,3.2,2023-01-06 1021,양지훈,개발,부장,7754,13,3.4,2013-07-10 1022,배가은,개발,과장,5483,13,3.4,2013-03-21 1023,백태윤,지원,사원,3510,4,4.1,2022-10-07 1024,유서윤,인사,사원,3477,2,,2024-06-22 1025,남주원,지원,사원,3581,1,3.3,2025-06-12 1026,노예린,영업,대리,4410,4,4.9,2022-06-04 1027,하시윤,지원,부장,7820,21,3.6,2005-04-15 1028,구다인,인사,사원,3846,1,3.2,2025-11-08 1029,서준혁,인사,대리,4549,4,3.2,2022-06-24 1030,민하율,개발,부장,7903,15,3.2,2011-12-03
내 코드 Python
Python 준비 중… 처음 한 번만 내려받아요
들여쓰기: Tab · 편집기에서 나가기: Esc 다음 Tab
실행 결과
실행하면 코드가 출력한 내용이 여기에 나타나요.
막혔을 때
풀이와 비교하기
내 코드와 한 줄씩 비교해 보세요. 풀이를 보는 것만으로 완료되지는 않아요.
import pandas as pd
import numpy as np
df = pd.read_csv("emp.csv")
df["월급"] = (df["연봉"] / 12).round(1)
df["고연봉"] = np.where(df["연봉"] >= 6000, 1, 0)
print(df["고연봉"].sum())
df["구간"] = pd.cut(df["연봉"], bins=[0, 4000, 6000, 10000], labels=["하", "중", "상"])
print(df["구간"].value_counts().sort_index())
df = df.rename(columns={"월급": "월급여"})
print(df.columns.tolist()[-3:])
print(df.drop(columns=["사번"]).shape[1])