1. Pandas 소개
Pandas는 파이썬에서 데이터 조작과 분석을 위한 핵심 라이브러리입니다. 2008년 Wes McKinney에 의해 개발되었으며, 금융 데이터 분석을 위해 시작되었지만 현재는 모든 종류의 데이터 분석에 사용됩니다. Pandas는 고성능의 사용하기 쉬운 데이터 구조와 데이터 분석 도구를 제공하여, 데이터 과학자, 분석가, 그리고 개발자들에게 필수적인 도구가 되었습니다.
2. Pandas의 주요 데이터 구조
2.1 Series
Series는 1차원 라벨링된 배열로, 모든 데이터 타입(정수, 실수, 문자열 등)을 포함할 수 있습니다.
import pandas as pd
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
2.2 DataFrame
DataFrame은 2차원 라벨링된 데이터 구조로, 여러 개의 Series로 구성됩니다. 스프레드시트나 SQL 테이블과 유사합니다.
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'
})
print(df)
3. 데이터 불러오기와 내보내기
Pandas는 다양한 형식의 데이터를 쉽게 읽고 쓸 수 있습니다.
3.1 CSV 파일
# 읽기
df = pd.read_csv('file.csv')
# 쓰기
df.to_csv('output.csv', index=False)
3.2 Excel 파일
# 읽기
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
# 쓰기
df.to_excel('output.xlsx', sheet_name='Sheet1')
3.3 SQL 데이터베이스
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df = pd.read_sql_table('table_name', engine)
df.to_sql('new_table', engine)
4. 데이터 탐색과 정제
4.1 기본 정보 확인
print(df.info()) # 데이터 타입과 null 값 정보
print(df.describe()) # 수치형 열의 기본 통계량
print(df.head()) # 처음 5행 출력
4.2 결측치 처리
# 결측치 확인
print(df.isnull().sum())
# 결측치 제거
df_cleaned = df.dropna()
# 결측치 채우기
df_filled = df.fillna(method='ffill') # 앞의 값으로 채우기
4.3 중복 제거
df_unique = df.drop_duplicates()
5. 데이터 변환과 처리
5.1 열 추가/삭제
# 새 열 추가
df['new_column'] = df['A'] + df['B']
# 열 삭제
df = df.drop('column_name', axis=1)
5.2 데이터 타입 변환
df['date_column'] = pd.to_datetime(df['date_column'])
df['category_column'] = df['category_column'].astype('category')
5.3 데이터 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df['normalized_column'] = scaler.fit_transform(df[['column_to_normalize']])
6. 데이터 분석과 집계
6.1 그룹화와 집계
grouped = df.groupby('category_column')
result = grouped['value_column'].agg(['mean', 'sum', 'count'])
6.2 피벗 테이블
pivot_table = df.pivot_table(values='value_column',
index='row_category',
columns='column_category',
aggfunc='mean')
6.3 시계열 분석
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
monthly_data = df.resample('M').mean()
7. 데이터 병합과 결합
7.1 concat
result = pd.concat([df1, df2], axis=0) # 세로로 병합
7.2 merge
merged = pd.merge(df1, df2, on='key_column', how='inner')
7.3 join
joined = df1.join(df2, on='key_column', how='left')
8. 고급 기능과 성능 최적화
8.1 멀티인덱싱
df_multi = df.set_index(['first_level', 'second_level'])
8.2 카테고리 데이터 최적화
df['category_column'] = df['category_column'].astype('category')
8.3 apply 함수 사용
def custom_function(x):
return x * 2
df['new_column'] = df['original_column'].apply(custom_function)
9. Pandas와 다른 라이브러리의 통합
- NumPy: 고성능 수치 계산
- Matplotlib/Seaborn: 데이터 시각화
- Scikit-learn: 머신러닝 모델 구축
- SQLAlchemy: 데이터베이스 연동
10. Pandas의 한계와 주의점
- 메모리 사용량: 큰 데이터셋을 다룰 때 메모리 문제가 발생할 수 있습니다.
- 성능: 매우 큰 데이터셋에서는 Dask나 Vaex 같은 대안을 고려할 수 있습니다.
- 학습 곡선: 다양한 기능을 익히는 데 시간이 걸릴 수 있습니다.
Pandas는 파이썬 데이터 분석 생태계의 핵심 라이브러리로, 데이터 조작과 분석을 위한 강력하고 유연한 도구를 제공합니다. 기본적인 데이터 처리부터 복잡한 시계열 분석까지 다양한 작업을 수행할 수 있으며, 다른 데이터 과학 라이브러리들과의 원활한 통합을 지원합니다. Pandas를 효과적으로 활용하면 데이터 분석 작업의 생산성을 크게 향상시킬 수 있으며, 데이터에서 의미 있는 인사이트를 도출하는 데 큰 도움이 될 것입니다. 지속적인 학습과 실습을 통해 Pandas의 다양한 기능을 익히고 활용한다면, 데이터 분석 능력을 한층 더 높일 수 있을 것입니다.