728x90
반응형

1. replace() 메서드
- Value-based Replacement(값 기반 치환) 임을 기억!: Index-based 아님
- Scope(적용 범위):
DataFrameSeries
- 주요 활용:
- Data Cleaning(데이터 정제),
- Missing Value Handling(결측치 처리),
- Label Normalization(라벨 통일),
- Outlier Handling(이상치 처리)
- Return Value:
- 기본적으로 New Object(새 객체) 반환
inplace=True지정 시 Original Object(원본 객체) 수정
2. Signature
DataFrame.replace(
to_replace=None,
value=None,
inplace=False,
limit=None,
regex=False,
method='pad'
)
Series.replace(
to_replace=None,
value=None,
inplace=False,
limit=None,
regex=False,
method='pad'
)
to_replace: Replace Target Value(치환 대상 값)- Scalar(스칼라)
listdict- Regex(정규표현식) 가능
value: Replacement Value(대체 값)to_replace와 매핑되는 값
inplace: In-place Update(원본 수정) 여부 (기본False)limit: Fill Limit(채움 한도)- method 사용 시 연속 구간 최대 채움 개수 제한
- 일반 값 치환에는 적용되지 않음
regex: 정규표현식 사용 여부- 문자열 패턴 매칭 시
True권장
- 문자열 패턴 매칭 시
method: Fill Method(채움 방식)- NaN(결측치) 치환 전용 옵션
'pad'/'ffill': Forward Fill(앞 방향 채움)'bfill': Backward Fill(뒤 방향 채움)
- 일반 값 치환에서는 무시됨
- NaN(결측치) 치환 전용 옵션
3. Quick Mental Model(핵심 개념)
DataFrame-level Replace: 여러 columns 동시에 처리 가능, column별 규칙 지정 가능Series-level Replace(시리즈 레벨 치환): 특정 column만 치환dict-based Multiple Mapping: DataFrame/Series 모두 가능listMapping(리스트 매핑):to_replace와value모두 리스트 : 길이 일치 필수 (1:1 대응)to_replace는 리스트,value는 단일 값 : 여러 값 → 하나의 값 매핑 가능
method: NaN 전용 옵션
4. Basic Usage on DataFrame(DataFrame 기본 사용법)
import pandas as pd
df = pd.DataFrame({
"A": [1, 2, 3, 4],
"B": ["cat", "dog", "cat", "mouse"],
"C": [10, 20, 30, 40]
})
# 1) Single Value Replacement(단일 값 치환)
df1 = df.replace(1, 100)
# 2) Multiple Value Replacement with Lists(리스트 기반 다중 치환, 1:1 대응)
df2 = df.replace([1, 2], [100, 200])
# 3) Multiple Values → One Value(여러 값 → 하나의 값 치환)
df3 = df.replace([1, 2], 0)
# 4) Frame-wide Dict Mapping(프레임 전체 딕셔너리 매핑)
df4 = df.replace({"dog": "puppy", 10: 999})
# 5) Column-wise Nested Dict Mapping(컬럼별 중첩 딕셔너리 매핑)
df5 = df.replace({"A": {1: 100, 4: 400}, "B": {"cat": "kitten"}})
# 6) Regex-based Replacement(정규표현식 치환)
df6 = df.replace({"B": {r"^c.*": "animal"}}, regex=True)
5. Usage on Series (특정 열 국소 치환)
df_ser = df.copy()
# Single Value(단일 값 치환)
df_ser["B"] = df_ser["B"].replace("cat", "kitten")
# dict-based Multiple Mapping
df_ser["B"] = df_ser["B"].replace({"dog": "puppy", "mouse": "hamster"})
# Regex-based Replacement
df_ser["B"] = df_ser["B"].replace(r"^kit.*", "baby cat", regex=True)
# In-place Replacement(가독성상 대입 권장)
df_ser["A"].replace({1: 100, 4: 400}, inplace=True)
6. dict-based Multiple Mapping Patterns
- DataFrame-wide Mapping(프레임 전체):
df.replace({old:new, ...}) - Column-wise Nested Mapping:
df.replace({"ColA": {old:new}, "ColB": {old:new}}) - Series-specific Mapping(시리즈 전용):
df["Col"].replace({old:new, ...})
7. NaN 치환 시 method 활용
import numpy as np
df_nan = pd.DataFrame({"A": [1, np.nan, 3, np.nan, 5]})
# Forward Fill(앞 방향 채움)
df_ffill = df_nan.replace(to_replace=np.nan, method="ffill")
# Backward Fill(뒤 방향 채움)
df_bfill = df_nan.replace(to_replace=np.nan, method="bfill")
# 일반 값 치환에 method 사용 → 무시됨
df_val = df_nan.replace(to_replace=1, method="ffill") # 변화 없음
8. fillna 와의 차이
replace(): 범용 값 치환 도구 — NaN 포함 모든 값 치환 가능fillna(): NaN 전용 도구 — 오직 NaN만 처리replace(method=...): NaN일 때만 의미, 일반 값 치환에는 무시됨fillna(method=...): NaN을 ffill/bfill로 채우는 대표적 방식
Example(예제 코드)
df = pd.DataFrame({
"A": [1, np.nan, 3, np.nan, 5],
"B": ["cat", "dog", None, "cat", "mouse"]
})
# [1] replace(): NaN 포함, 임의의 값도 치환 가능
df_r = df.replace({"A": {1: 100}, "B": {None: "NA"}})
# [2] replace() + method: NaN을 ffill로 채움
df_r_ffill = df.replace(to_replace=np.nan, method="ffill")
# [3] fillna(): 오직 NaN만 채움
df_f = df.copy()
df_f["B"] = df_f["B"].fillna("MISSING")
df_f["A"] = df_f["A"].fillna(df_f["A"].mean())
# [4] fillna() + method: NaN을 ffill + limit 적용
df_f_ffill_limit = df["A"].fillna(method="ffill", limit=1)
9. Gotchas and Best Practices
- Value-based Replacement
- List Mapping(리스트 매핑):
to_replace와value모두 리스트: 길이 일치 필수 (1:1 대응)to_replace만 리스트,value단일 값: 여러 값 → 하나의 값 치환 가능
- Regex Keys(정규식 키):
regex=True명시 권장 - Chained Indexing(체인 인덱싱): 피하기, 대입(assign) 방식 권장
- Pandas는 체인 인덱싱 결과가 원본 DataFrame의 뷰(View)인지 복사본(Copy)인지 보장하지 않음.
- df[...] [...]처럼 두 번 연속 인덱싱하는 chained indexing의 경우 SettingWithCopyWarning 이 발생함.
- 가급적 loc 또는 iloc을 통한 인덱서를 활용할 것.
inplace=True: 과용 지양, 가독성 위해 대입 방식 선호method: NaN 전용 옵션, 일반 값 치환에는 무시됨
728x90
'Python > pandas' 카테고리의 다른 글
| [Pandas] unique(), value_counts(), nunique() (0) | 2025.08.23 |
|---|---|
| [Pandas] stack() 과 unstack() (0) | 2025.08.23 |
| [Pandas] Indexer - loc, iloc, at, iat (0) | 2025.08.22 |
| [Pandas] Reduction 과 Aggregation (0) | 2025.08.21 |
| [Pandas] DataFrame : Basic Attributes and Exploration Methods (0) | 2025.08.21 |