반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- string
- math
- Java
- numpy
- Python
- google apps script
- GIT
- array
- list
- Redshift
- Excel
- Apache
- dataframe
- gas
- c#
- Github
- Mac
- matplotlib
- SQL
- PANDAS
- django
- 파이썬
- hive
- Tkinter
- Kotlin
- PostgreSQL
- Google Excel
- Google Spreadsheet
- PySpark
Archives
- Today
- Total
달나라 노트
Python Pandas : std() — 표준편차를 계산하는 메서드 본문
728x90
반응형
Pandas .std() — 표준편차를 계산하는 메서드
데이터가 평균에서 얼마나 퍼져 있는지를 수치로 나타냅니다. 값이 클수록 데이터가 들쭉날쭉하고, 작을수록 고르게 모여 있습니다.
기본 문법
Series.std(ddof=1)
DataFrame.std(ddof=1, axis=0)
| 파라미터 | 설명 |
|---|---|
ddof |
기본값 1은 표본 표준편차, 0으로 바꾸면 모 표준편차 |
axis |
0이면 열 방향(각 컬럼의 std), 1이면 행 방향 |
예시 1 — Series 기본
import pandas as pd
s = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
s.std()
# 2.0
예시 2 — DataFrame (axis=0, 기본)
import pandas as pd
df = pd.DataFrame({
'국어': [80, 90, 70, 100],
'수학': [60, 95, 55, 90],
})
df.std()
# 국어 12.91
# 수학 19.76
# 수학이 국어보다 점수 편차가 크다는 뜻
ddof=1 vs ddof=0
표준편차를 계산할 때 분모가 달라집니다.
ddof=1 → 분모: n - 1 (표본 표준편차, pandas 기본값)
ddof=0 → 분모: n (모 표준편차, numpy 기본값)
s = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
s.std(ddof=1) # 2.0 ← 표본, 일반적으로 이걸 씀
s.std(ddof=0) # 1.87 ← 모집단 전체를 갖고 있을 때
표본(설문 응답자, 실험 측정값 등 일부 데이터)을 다룰 때는
ddof=1, 모집단 전체 데이터를 갖고 있을 때는 ddof=0을 씁니다.
실무 활용 — 이상치 탐지
정규분포에서 표준편차 범위별 포함 비율은 다음과 같습니다.
±1σ → 약 68.27% 포함 → 약 31.73% 가 바깥
±2σ → 약 95.45% 포함 → 약 4.55% 가 바깥
±3σ → 약 99.73% 포함 → 약 0.27% 가 바깥
평균 ± 2σ를 벗어나면 전체의 약 4.55%에 해당하는 극단값, ± 3σ를 벗어나면 약 0.27%에 해당하는 극단값입니다.
mean = df['매출'].mean()
std = df['매출'].std()
# ±2σ 기준 — 조금 더 공격적으로 outlier를 잡음
outliers = df[(df['매출'] < mean - 2*std) | (df['매출'] > mean + 2*std)]
# ±3σ 기준 — 정말 극단적인 값만 잡음
outliers = df[(df['매출'] < mean - 3*std) | (df['매출'] > mean + 3*std)]
실무에서는
±2σ 또는 ±3σ 기준을 가장 많이 씁니다.
pandas vs numpy — ddof 기본값이 다르다
numpy에도 np.std()가 있지만, ddof 기본값이 달라서 같은 데이터에 아무 설정 없이 쓰면 결과가 다르게 나옵니다.
import numpy as np
import pandas as pd
s = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
arr = np.array([2, 4, 4, 4, 5, 5, 7, 9])
s.std() # 2.0 ← ddof=1 기본 (표본 표준편차)
np.std(arr) # 1.87 ← ddof=0 기본 (모 표준편차)
# ddof를 맞춰주면 결과가 같아짐
np.std(arr, ddof=1) # 2.0 ← pandas와 동일
pandas .std() |
numpy np.std() |
|
|---|---|---|
| ddof 기본값 | 1 (표본) | 0 (모집단) |
| 대상 | Series, DataFrame | ndarray |
728x90
반응형
'Python > Python Pandas' 카테고리의 다른 글
| Python Pandas : Series .values vs .to_numpy() (0) | 2026.05.14 |
|---|---|
| Python Pandas : where & mask (값 필터링하여 바꾸기) (0) | 2026.05.12 |
| Python Pandas : clip (최대 최소값 제한하기) (0) | 2026.05.12 |
| Python Pandas : info(), memory_usage() (DataFrame의 memory 사용량 보기) (0) | 2026.05.06 |
| Python Pandas : dtypes (column의 data type 출력, column data type 확인) (0) | 2025.09.28 |
Comments
