기타

파이썬 Pandas로 SQL처럼 데이터 다루기: groupby, merge, query, pivot 완벽 마스터 가이드

SigmoidFunction 2025. 5. 27. 18:46
728x90
반응형

📊 Pandas를 활용한 SQL 스타일 데이터 처리의 중요성

데이터 분석 업무에서 SQL 쿼리와 같은 직관적인 데이터 처리 방식은 필수적입니다. 파이썬의 Pandas 라이브러리는 SQL의 핵심 기능들을 파이썬 환경에서 구현할 수 있게 해주는 강력한 도구입니다. groupby, merge, query, pivot 등의 함수들을 통해 복잡한 데이터 조작을 간단하고 효율적으로 수행할 수 있습니다.

turned on gray laptop computer

📸 Photo by Luca Bravo

🔗 Unsplash에서 보기 • ❤️ 2332 likes • 클릭하면 원본 이미지로 이동

본 포스트에서는 실무에서 자주 사용되는 Pandas의 핵심 기능들을 SQL과 비교하여 설명하고, 실전 예제를 통해 활용법을 상세히 알아보겠습니다.

🔍 Query 함수: SQL의 WHERE절을 Pandas로

Pandas의 query 함수는 SQL의 WHERE절과 동일한 역할을 수행합니다. 복잡한 조건문을 문자열 형태로 간단하게 표현할 수 있어 코드의 가독성을 크게 향상시킵니다.

기본 사용법:


import pandas as pd


# 샘플 데이터 생성

df = pd.DataFrame({

'name': ['김철수', '이영희', '박민수', '최지은'],

'age': [25, 30, 35, 28],

'salary': [3500, 4200, 5100, 3800],

'department': ['개발팀', '마케팅팀', '개발팀', '인사팀']

})


# 나이가 30 이상인 직원 조회

result = df.query('age >= 30')

print(result)

복합 조건 활용:


# 개발팀이면서 급여가 4000 이상인 직원

dev_high_salary = df.query('department == "개발팀" and salary >= 4000')


# 나이가 25-35 사이인 직원

<div style="text-align: center; margin: 35px 0; padding: 20px; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);">
    <img src="https://images.unsplash.com/photo-1504868584819-f8e8b4b6d7e3?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3NTYzNjd8MHwxfHNlYXJjaHwzfHxkYXRhJTIwdmlzdWFsaXphdGlvbiUyMGRhc2hib2FyZHxlbnwxfDB8fHwxNzQ4MzM3MzI4fDA&ixlib=rb-4.1.0&q=80&w=1080" 
         alt="turned on black and grey laptop computer" 
         loading="lazy"
         style="max-width: 100%; height: auto; border-radius: 12px; box-shadow: 0 6px 20px rgba(0,0,0,0.15); transition: transform 0.3s ease; cursor: pointer;"
         onmouseover="this.style.transform='scale(1.05)'"
         onmouseout="this.style.transform='scale(1)'"
         onclick="window.open('https://unsplash.com/photos/turned-on-black-and-grey-laptop-computer-mcSDtbWXUZU', '_blank')">
    <div style="margin-top: 15px; padding: 10px; background: rgba(255,255,255,0.9); border-radius: 8px;">
        <p style="margin: 0; font-size: 13px; color: #555; line-height: 1.4;">
            📸 <strong>Photo by <a href="https://unsplash.com/@goumbik" target="_blank" style="color: #007acc; text-decoration: none; font-weight: 600;">Lukas Blazek</a></strong>
        </p>
        <p style="margin: 5px 0 0 0; font-size: 12px; color: #777;">
            🔗 <a href="https://unsplash.com/photos/turned-on-black-and-grey-laptop-computer-mcSDtbWXUZU" target="_blank" style="color: #007acc; text-decoration: none;">Unsplash에서 보기</a>
             • ❤️ 2201 likes
            <span style="color: #999;"> • 클릭하면 원본 이미지로 이동</span>
        </p>
    </div>
</div>

age_range = df.query('25 <= age <= 35')

📊 GroupBy: SQL의 GROUP BY를 완벽 구현

GroupBy는 데이터를 그룹별로 분할하고 집계 함수를 적용하는 핵심 기능입니다. SQL의 GROUP BY절과 동일한 개념으로, 데이터 분석에서 가장 빈번하게 사용되는 기능 중 하나입니다.

기본 그룹핑과 집계:


# 부서별 평균 급여 계산

dept_avg_salary = df.groupby('department')['salary'].mean()

print(dept_avg_salary)


# 부서별 다중 집계

dept_stats = df.groupby('department').agg({

'salary': ['mean', 'max', 'min'],

'age': 'mean'

})

print(dept_stats)

고급 GroupBy 활용:


# 사용자 정의 함수 적용

def salary_grade(salaries):

return '고급' if salaries.mean() > 4000 else '일반'


dept_grade = df.groupby('department')['salary'].apply(salary_grade)


# 조건부 필터링

high_salary_depts = df.groupby('department').filter(lambda x: x['salary'].mean() > 4000)

🔗 Merge: SQL JOIN의 완벽한 대안

Merge 함수는 SQL의 다양한 JOIN 연산을 Pandas에서 구현합니다. 여러 데이터프레임을 효율적으로 결합하여 통합된 분석을 가능하게 합니다.

기본 Merge 연산:


# 부서 정보 데이터프레임

dept_info = pd.DataFrame({

'department': ['개발팀', '마케팅팀', '인사팀'],

'location': ['서울', '부산', '대구'],

'budget': [10000, 8000, 6000]

})


# Inner Join (교집합)

merged_inner = pd.merge(df, dept_info, on='department', how='inner')


# Left Join

merged_left = pd.merge(df, dept_info, on='department', how='left')


# Outer Join (합집합)

merged_outer = pd.merge(df, dept_info, on='department', how='outer')

복합 키를 활용한 Merge:


# 여러 컬럼을 기준으로 조인

result = pd.merge(df1, df2, on=['department', 'grade'], how='inner')


# 서로 다른 컬럼명으로 조인

result = pd.merge(df1, df2, left_on='dept_name', right_on='department_name')

🔄 Pivot: 데이터 구조 변환의 핵심

Pivot 함수는 데이터의 구조를 행과 열로 재배열하여 다른 관점에서 데이터를 분석할 수 있게 해줍니다. Excel의 피벗 테이블과 유사한 기능을 제공합니다.

기본 Pivot 테이블:


# 월별 판매 데이터 예시

sales_data = pd.DataFrame({

'month': ['1월', '1월', '2월', '2월', '3월', '3월'],

'product': ['A', 'B', 'A', 'B', 'A', 'B'],

'sales': [100, 150, 120, 180, 110, 200],

'quantity': [10, 15, 12, 18, 11, 20]

})


# 제품별 월별 매출 피벗

pivot_sales = sales_data.pivot(index='month', columns='product', values='sales')

print(pivot_sales)

Pivot_table을 활용한 고급 분석:


# 집계 함수와 함께 사용

pivot_table = pd.pivot_table(sales_data,

values=['sales', 'quantity'],

index='month',

columns='product',

aggfunc='sum',

fill_value=0)


# 다중 인덱스 피벗

multi_pivot = pd.pivot_table(data,

values='sales',

index=['region', 'month'],

columns='product',

aggfunc='mean')

💡 실무 활용 팁과 성능 최적화

  • **메모리 효율성:** 대용량 데이터 처리 시 chunksize 매개변수를 활용하여 메모리 사용량을 제어하세요.
  • **인덱스 활용:** 자주 사용되는 컬럼은 인덱스로 설정하여 검색 속도를 향상시킬 수 있습니다.
  • **데이터 타입 최적화:** 적절한 데이터 타입 설정으로 메모리 사용량과 처리 속도를 개선하세요.
  • **벡터화 연산:** 반복문 대신 Pandas의 내장 함수를 활용하여 성능을 크게 향상시킬 수 있습니다.
person using MacBook Pro

📸 Photo by Campaign Creators

🔗 Unsplash에서 보기 • ❤️ 1686 likes • 클릭하면 원본 이미지로 이동

이러한 Pandas의 핵심 기능들을 마스터하면 SQL과 동일한 수준의 데이터 처리 능력을 파이썬 환경에서 구현할 수 있습니다. 지속적인 연습과 실제 프로젝트 적용을 통해 데이터 분석 역량을 한층 더 발전시켜 나가시기 바랍니다.


🏷️ 태그

#파이썬 #Pandas #데이터분석 #SQL #groupby #merge #pivot #데이터처리

728x90
반응형