✅ 메서드 체이닝(Method Chaining) 정리
구분설명
개념 | 여러 개의 메서드(함수)를 연속적으로 연결하여 호출하는 방식 |
필요한 이유 | 코드를 간결하게 유지하고, 중간 변수 없이 연속적인 데이터 처리를 하기 위해 사용 |
어떻게 동작? | 하나의 메서드가 실행된 후, 그 결과를 반환하여 다음 메서드에서 바로 처리할 수 있도록 연결됨 |
기본 원리 | 대부분의 Pandas 메서드는 DataFrame 또는 Series를 반환하므로, 연속적으로 호출 가능 |
주의할 점 | 각 메서드가 반환하는 객체 타입을 확인해야 하며, 코드 가독성이 떨어질 수 있음 |
📌 메서드 체이닝 동작 절차
단계동작 내용예제 코드
1단계 | 원본 데이터프레임 생성 | df = pd.DataFrame({...}) |
2단계 | 필요한 열 선택 (filtering) | df[['column1', 'column2']] |
3단계 | 필터 적용 (조건 설정) | .query("column1 > 10") |
4단계 | 새로운 열 추가 (변환 또는 계산) | .assign(new_col=df['column2'] * 2) |
5단계 | 정렬 (정렬 또는 그룹화) | .sort_values(by='new_col', ascending=False) |
6단계 | 최종 결과 반환 (head() 또는 tail()) | .head(5) |
🚀 결론
✔ 메서드 체이닝은 코드의 가독성을 높이고, 한 줄로 여러 작업을 수행 가능
✔ 중간 변수 없이 데이터 처리를 한 번에 실행 → 코드가 간결해짐
✔ 체이닝을 사용할 때, 각 메서드가 반환하는 객체 타입을 고려해야 함
✔ 괄호 ()를 사용하여 여러 줄로 나누면 가독성을 유지하면서 체이닝 활용 가능 🚀
📌 예제 코드 (일반 방식 vs 메서드 체이닝 방식 비교)
❌ 중간 변수를 사용한 일반 방식 (가독성이 떨어짐)
import pandas as pd
df = pd.DataFrame({'A': [5, 15, 25], 'B': [10, 20, 30]})
df_filtered = df[df['A'] > 10] # 조건 필터링
df_sorted = df_filtered.sort_values(by='B', ascending=False) # 정렬
df_final = df_sorted.assign(C=df_sorted['B'] * 2) # 새로운 열 추가
print(df_final)
✅ 메서드 체이닝 방식 (더 간결하고 직관적)
df_final = (
df[df['A'] > 10]
.sort_values(by='B', ascending=False)
.assign(C=lambda x: x['B'] * 2)
)
print(df_final)
📌 순서가 중요한 이유 (속도 최적화가 필요한 경우)
메서드 체이닝에서 연산 순서를 잘못 지정하면 불필요한 연산이 많아져 속도가 느려질 수 있음
❌ 비효율적인 순서 | ✅ 최적화된 순서 |
먼저 정렬 → 나중에 필터링 | 먼저 필터링 → 나중에 정렬 |
큰 데이터에서 불필요한 열 추가 후 필터링 | 필터링 후 필요한 열만 남기고 연산 |
🚀 결론
✔ 메서드 체이닝의 순서는 바꿀 수 있지만, 성능 최적화를 고려해야 함
✔ 큰 데이터에서 먼저 필터링(query) 후 정렬(sort_values)하는 것이 효율적
✔ 불필요한 연산을 줄이면 속도와 메모리 사용량이 줄어듦
✔ 항상 작은 데이터로 줄인 후 연산하는 것이 빠름 🚀
반응형
'ChatGPT 아카이브 > Pandas' 카테고리의 다른 글
melt() 함수의 옵션 헛갈리지 않게 기억하기 (0) | 2025.03.05 |
---|---|
pivot vs pivot_table 차이점 (0) | 2025.03.05 |
concate / 축(axis) 번호 살펴보기 (0) | 2025.03.05 |
pandas rename 함수 / astype 함수 / Pandas의 View 와 Copy 반환 (0) | 2025.03.05 |
dropna() vs fillna() 비교 / NaN과 None의 차이 (0) | 2025.03.04 |