DataFrame: 데이터 중심 구조
pandas의 핵심 데이터 구조인 DataFrame은 행과 열로 구성된 표 형태의 데이터를 다룹니다. 각 행은 인덱스로 식별되며, 열은 이름을 가집니다.
기본 모듈 로드
import pandas as pd
import numpy as np
데이터 생성 및 기본 조작
CSV 파일을 읽어와 DataFrame으로 변환하는 예시:
chicago_taxi_data = pd.read_csv("https://download.mlcc.google.com/mledu-datasets/chicago_taxi_train.csv")
직접 NumPy 배열을 사용해 DataFrame 생성:
# 5행 × 2열 배열 생성
data_array = np.array([[0, 3], [10, 7], [20, 9], [30, 14], [40, 15]])
# 열 이름 지정
column_names = ['온도', '활동량']
# DataFrame 생성
sample_df = pd.DataFrame(data=data_array, columns=column_names)
print(sample_df)
인덱스 관리
기본 인덱스는 RangeIndex(start=0, stop=5, step=1)입니다. 커스텀 인덱스를 설정하려면:
custom_index_df = pd.DataFrame(
data=data_array,
columns=column_names,
index=[10, 20, 30, 40, 50]
)
인덱스를 재설정하거나 변경하는 메서드:
reset_index(drop=False, inplace=False): 현재 인덱스를 열로 복사하거나 삭제set_index(keys, drop=True, append=False): 특정 열을 인덱스로 설정
컬럼 추가 및 수정
새 컬럼을 생성하거나 기존 컬럼 간 연산 수행:
sample_df['보정값'] = sample_df['활동량'] + 2
sample_df['자카린'] = sample_df['타니'] + sample_df['제이슨']
데이터 접근 방식
행과 열에 접근하는 다양한 방법:
# 특정 열 접근
print(sample_df['온도'])
# 처음 3개 행 확인
print(sample_df.head(3))
# 특정 행 접근 (Series 반환)
print(sample_df.iloc[2])
# 인덱스 기반 슬라이싱
print(sample_df[1:4])
# 조건에 맞는 데이터 추출
filtered_data = chicago_taxi_data[chicago_taxi_data['FARE'] > 50]
랜덤 샘플링
무작위로 데이터 샘플 추출:
random_sample = chicago_taxi_data.sample(n=10, random_state=42)
셀 단위 접근
특정 셀 값에 접근:
print(f"2번째 행, 타니 컬럼 값: {sample_df['타니'][1]}")
Series vs DataFrame 차이
Series는 하나의 열을 의미하며, DataFrame은 여러 개의 Series가 모여 형성된 구조입니다.
참조와 복사의 차이
변수 할당 시 참조 또는 복사 여부의 중요성:
reference_df = sample_df # 참조
copy_df = sample_df.copy() # 복사
# 참조를 수정하면 원본도 영향받음
reference_df.at[1, '온도'] = 100
print(sample_df.at[1, '온도']) # 결과: 100
인덱싱 방식 비교
.iloc[]: 정수 위치 기반 인덱싱.loc[]: 레이블 기반 인덱싱.at[]: 스칼라 값에 대한 빠른 접근.iat[]: 정수 위치 기반 스칼라 접근
데이터 탐색 및 통계 분석
기본 통계 정보 확인:
training_df.describe()
고유한 값 수 확인:
num_companies = training_df['COMPANY'].nunique()
최빈값 찾기:
most_frequent_payment = training_df['PAYMENT_TYPE'].value_counts().idxmax()
수치형 컬럼만 선택:
numeric_cols = training_df.select_dtypes(include=[np.number])
최대/평균/표준편차 계산:
max_fare = training_df['FARE'].max()
mean_distance = training_df['TRIP_MILES'].mean()
std_dev = training_df.select_dtypes(include=[np.number]).std()
결측치 확인
missing_count = training_df.isnull().sum().sum()
상관관계 분석
correlation_matrix = training_df.corr(numeric_only=True)
출력 옵션 설정
pd.options.display.max_rows = 10
pd.options.display.float_format = "{:.2f}".format