📊 2. Series 인덱싱, 통계, 그리고 결측치 완벽 정복하기
앞선 포스팅에서 1줄짜리 데이터인 'Series(시리즈)'를 만드는 방법을 배웠습니다. 이번 시간에는 만들어진 시리즈에서 원하는 데이터를 자유자재로 뽑아내고, 통계를 내고, 비어있는 값(결측치)을 청소하는 실무 핵심 스킬들을 알아보겠습니다.
🎯 1. 데이터 뽑아내기 (Indexing & Slicing)
시리즈에서 원하는 값을 찾는 방법은 크게 두 가지, 순번(번호표)과 이름(이름표)으로 나뉩니다.
① 인덱싱 (원하는 값 딱 짚어내기)
- iloc[순번]: 0부터 시작하는 '컴퓨터의 순서(Integer)'로 찾습니다.
- loc[이름]: 우리가 직접 달아준 '이름표(Label)'로 찾습니다.
- 팬시 인덱싱: 여러 개를 한 번에 찾고 싶을 때는 리스트 [] 안에 담아서 던져줍니다. (예: s.loc[['국어', '수학']])
② 슬라이싱 (원하는 만큼 잘라내기)
리스트처럼 콜론(:)을 사용해 데이터를 자릅니다. 여기서 가장 많이 하는 실수가 있으니 꼭 기억하세요!
- 순번(iloc)으로 자를 때: 끝 번호는 포함하지 않습니다. (예: iloc[3:10] 👉 3번부터 9번까지)
- 이름(loc)으로 자를 때: 끝 이름까지 모두 포함합니다. (예: loc['수학':'국사'] 👉 수학부터 국사까지 전부)
🚨 [주의] 슬라이싱은 복사본이 아닙니다! (View) 판다스에서 데이터를 슬라이싱해서 변수에 담으면, 완전히 새로운 파일이 생기는 게 아니라 **'원본 데이터의 바로가기'**가 만들어집니다. 잘라낸 데이터의 값을 수정하면 원본도 같이 바뀌어 버립니다! 원본을 안전하게 지키고 싶다면 무조건 **.copy()**를 붙여서 진짜 복사본을 만들어야 합니다.
Pythonresult = s2.loc["국어":"수학"].copy() # 이렇게 해야 안전함!
⚡ 2. 마법의 연산 (벡터화 & 불리언 인덱싱)
판다스가 엑셀보다 압도적으로 편한 이유입니다. 반복문(for) 없이 데이터 전체를 한 번에 계산하고 필터링할 수 있습니다.
① 원소 단위 연산 (Vectorization)
시리즈 전체에 숫자 하나를 더하거나 곱하면, 알아서 모든 데이터에 일괄 적용됩니다. 시리즈끼리 더할 때는 '같은 이름표(Index Name)'를 가진 데이터끼리 알아서 짝을 지어 계산해 줍니다.
s1 = pd.Series([80, 90, 100], index=['국어', '영어', '수학'])
print(s1 + 10) # 모든 과목 점수가 10점씩 올라감!
② 불리언 인덱싱 (조건 검색)
원하는 조건에 맞는 데이터만 뜰채로 건져내는 기능입니다.
- AND 조건: & 사용 (파이썬의 and 사용 불가)
- OR 조건: | 사용 (파이썬의 or 사용 불가)
- NOT 조건: ~ 사용
- 주의: 조건이 여러 개일 때는 무조건 괄호 () 로 묶어줘야 합니다!
# 점수가 80점 이상이고 90점 이하인 과목만 뽑기
s1[(s1 >= 80) & (s1 <= 90)]
🛠️ 3. 실무 필수! Series 주요 메서드
데이터를 훑어보고 파악할 때 밥 먹듯이 쓰는 기능들입니다.
- head(n) / tail(n): 데이터가 너무 많을 때, 맨 앞(head)이나 맨 뒤(tail)의 n개만 살짝 엿봅니다. (기본값 5개)
- astype('타입'): 데이터의 크기나 종류(int8, float32 등)를 변환할 때 씁니다. (메모리 절약에 필수!)
- value_counts(): 범주형 데이터(예: 혈액형, 지역)가 각각 몇 개씩 있는지 개수를 세어줍니다.
- nunique(): 중복을 제거하고 총 몇 종류의 데이터가 있는지 알려줍니다.
- sort_index(): 인덱스(이름표) 기준으로 가나다순 정렬합니다.
- sort_values(): 데이터 값(점수, 가격 등) 기준으로 정렬합니다.
- 꿀팁: ascending=False를 괄호 안에 넣으면 큰 것부터 나오는 '내림차순' 정렬이 됩니다.
📈 4. 데이터를 한눈에 요약! (기술 통계량)
데이터 분석의 꽃, 통계입니다. 판다스는 이 복잡한 계산을 함수 하나로 끝내줍니다.
- mean() (평균): 전체 합을 개수로 나눈 값. (단점: 비정상적으로 크거나 작은 '이상치'에 쉽게 흔들립니다.)
- median() (중앙값): 데이터를 크기순으로 일렬로 세웠을 때 정확히 정중앙에 있는 값. (평균의 단점을 보완해 줍니다.)
- std() / var() (표준편차 / 분산): 데이터가 평균으로부터 얼마나 흩어져 있는지 보여줍니다.
- mode() (최빈값): 가장 많이 등장한 유행값을 찾습니다.
- quantile(q=0.25) (분위수): 데이터를 크기순으로 세우고 특정 퍼센트 위치에 있는 값을 찾습니다. (하위 25% 값 찾기 등)
💡 한 방에 끝내는 describe() 이 모든 통계량을 한 번에 표 형태로 쫙 뽑아주는 마법의 메서드입니다. 데이터 분석을 시작할 때 무조건 가장 먼저 쳐보는 코드 중 하나입니다.
🧹 5. 빵꾸난 데이터 메우기 (결측치 처리)
현실의 데이터는 완벽하지 않습니다. 비어있는 값, 즉 결측치(NaN, Not a Number)가 무조건 존재합니다. 이 구멍 난 데이터를 어떻게 처리하느냐가 분석가의 실력입니다. (참고로 판다스에서 결측치는 float 실수형으로 취급됩니다.)
① 결측치 찾기
# 데이터에 결측치가 총 몇 개인지 한 방에 세어줌!
s.isna().sum()
② 결측치 버리기 (Drop)
구멍 난 데이터가 별로 없다면 그냥 삭제하는 게 깔끔합니다.
s.dropna()
③ 결측치 채우기 (Fill)
데이터를 지우기 아깝다면, 가장 그럴싸한 값(평균, 중앙값, 최빈값 등)으로 빈칸을 채워줍니다.
# 결측치를 전체 데이터의 평균값으로 메우기
s.fillna(s.mean())
# 주의: 진짜로 원본 데이터를 수정하려면 inplace=True를 넣어야 합니다.
s.fillna(s.mean(), inplace=True)
여기까지 판다스의 가장 기초가 되는 뼈대, 'Series(시리즈)'에 대해 완벽하게 알아보았습니다. 데이터를 뽑고, 자르고, 계산하고, 비어있는 값을 채우는 이 감각을 잘 기억해 두세요. 다음 시간에는 이 시리즈들을 여러 개 이어 붙여서 진짜 엑셀 같은 표를 만드는 'DataFrame(데이터프레임)'의 세계로 떠나보겠습니다! 🚀
'두두 IT > 파이썬' 카테고리의 다른 글
| [PYTHON-Pandas 02-02] DataFrame 명령어 모음 (0) | 2026.05.04 |
|---|---|
| [PYTHON-Pandas 02-01] 데이터 분석의 꽃, DataFrame 완벽 정복! (0) | 2026.05.04 |
| [PYTHON] Pandas 개요 및 시리즈(Series) (0) | 2026.04.29 |
| UV VENV 가상환경 구성(2) - VSCode (0) | 2026.04.29 |
| UV VENV 가상환경 구성(1) - 파워쉘과 VSCode (0) | 2026.04.29 |