CH1. 데이터 전처리 완벽 가이드(1) | Notion
0. 데이터 분석? 데이터 전처리?
www.notion.so
Pandas 소개 및 설치
pandas(판다스)는 테이블 형태(행과 열)의 데이터를 효과적으로 다룰 수 있도록 해주는 파이썬의 핵심 라이브러리!!
- 엑셀 같은 스프레드시트의 기능을 파이썬에서 제공한다고 생각하면 됨
데이터 읽기/쓰기, 필터링, 집계, 결합, 시계열 처리 등 데이터 분석에 필요한 대부분의 작업을 간단한 코드로 수행 가능
설치 방법 : 판다스는 파이썬 패키지로 제공, pip 이나 아나콘다(Conda)를 통해 쉽게 설치 가능
pip install pandas
또는 아나콘다 환경에서는 conda install pandas 명령으로 설치 가능하며, 설치 후에는 파이썬 스크립트나 노트북에서 import pandas as pd 로 임포트하여 사용
버전확인 : 설치가 완료되었다면 다음 코드로 판다스 버전을 확인해볼 수 있음(최선 버전을 사용하는 것이 좋음)
import pandas as pd
print(pd.__version__)
Series와 DataFrame 기본 구조
판다스의 핵심 자료구조 두 가지는 Series(시리즈)와 DataFrame(데이터프레임)이다.
Series 객체
Series는 1차원 배열 형태의 자료구조로, 값(value)들의 모음에 각각 인덱스(index)라는 이름표가 붙어있는 구조입니다. 엑셀로 치면 한 컬럼(column)에 해당하며, 넘파이(Numpy)의 1차원 배열과 유사하지만 각 값에 인덱스(라벨)가 붙어 있다는 점이 다르다.
- Series 생성 : Series는 pd.Series() 생성자로 만들 수 있습니다. 파이썬 리스트, 넘파이 배열, 사전 등으로부터 Series를 생성할 수 있고, 인덱스를 별도로 지정하지 않으면 기본적으로 0부터 시작하는 정수 인덱스가 자동 할당된다.
import pandas as pd
# 리스트로부터 Series 생성 (인덱스 미지정 시 0,1,2,... 자동 생성)
scores = pd.Series([90, 80, 85, 95])
print(scores)
0 90
1 80
2 85
3 95
dtype: int64
위 예에서는 학생들의 점수 리스트 [90,80,85,95]로 Series를 만들었습니다. 출력 결과를 보면 왼쪽에 0,1,2,3이 인덱스로 표시되고 오른쪽에 값이 나타납니다. dtype: int64는 시리즈 데이터의 자료형이 64비트 정수형임을 나타냅니다.
- 인덱스 지정 : Series 생성 시 인덱스를 원하는 값으로 지정할 수도 있다. 예를 들어 과목명을 인덱스로 하는 점수 Series를 만든다.
subjects = pd.Series([90, 80, 85, 95], index=['국어','영어','수학','과학'])
print(subjects)
국어 90
영어 80
수학 85
과학 95
dtype: int64
이렇게 하면 sbjects['국어'] 처럼 과목명을 키(key)처럼 사용하여 해당 값을 가져올 수 있다.
(subjects['국어'] = 90 이 된다.
- Series 속성 : Series에는 값 배열과 인덱스를 가져오는 속성이 있다.
- Series.values 를 사용하면 값들의 배열(numpy ndarray)을 얻을 수 있고
- Series.index 를 사용하면 인덱스 객체를 얻는다.
- 예를들어 subjects.index 는 index(['국어', '영어', '수학', '과학'], dtype='object')로 인덱스 목록을 반환
DataFrame 객체
DataFrame은 2차원 표 형태의 자료구조로, **행(row)**과 **열(column)**으로 구성된다. 데이터프레임은 여러 개의 Series가 같은 인덱스를 기준으로 모여 있는 형태로 이해할 수 있습니다. 엑셀의 시트나 SQL의 테이블과 비슷한 구조이며, 판다스에서 데이터를 다룰 때 가장 많이 사용하는 핵심 객체이다.
- DataFrame 생성: 가장 간단한 방법은 파이썬의 딕셔너리(dict)로부터 생성하는 것입니다. 딕셔너리의 키가 컬럼 이름, 값이 데이터 리스트가 되도록 구성하면 됩니다.
data = {
'이름': ['Alice', 'Bob', 'Charlie'],
'나이': [25, 30, 35],
'도시': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
이름 나이 도시
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
위에서 data 사전을 정의하고 pd.DataFrame(data) 로 데이터프레임을 만들었다.
- 컬럼과 인덱스 : 데이터프레임은 각 열에 컬럼 이름(label)이 있고, 각 행에 인덱스(label)가 있습니다. 위 예시에서 컬럼은 이름/나이/도시이고, 인덱스는 0,1,2입니다.
- df.columns 속성으로 컬럼 이름들을 (Index(['이름', '나이', '도시'], dtype= 'object') 형태로) 얻을 수 있고, df.index로 행 인덱스(현재는 RangeIndex(0, 3))을 확인할 수 있다.
- 데이터프레임 생성시 index 파라미터를 사용하면 행 인덱스도 원하는 값으로 지정할 수 있습니다.
- DataFrame 조회와 기본 정보
- DataFrame에서 상위 몇 개 행을 보고 싶다면 df.head() 메서드를 사용합니다 (기본 5개 행을 표시).
- 유사하게 df.tail()은 끝 부분 몇 개 행을 표시합니다.
- 또한 데이터프레임의 크기(행,열 개수)는 df.shape 속성으로 확인할 수 있으며, 각 컬럼의 데이터 타입, null 개수 등의 정보는 df.info()로 요약해서 볼 수 있습니다.
- 기초 통계량(평균, 표준편차, 사분위수 등)은 df.describe()로 빠르게 구할 수 있습니다.
print(df.shape) # (행 수, 열 수)
print(df.info()) # 각 컬럼의 타입, null 개수 등 정보 출력
print(df.describe()) # 수치형 컬럼들의 통계 요약 (수치형 ? 범주형 ? )
print(df.shape) # 해당 데이터의 행(데이터 수)과 열(컬럼 수)
💡 판다스 주요 데이터 타입
1) 수치형 (Numeric Types)
- int: 정수형 (예: int8, int16, int32, int64)
- → 메모리 크기에 따라 나뉨 (int64가 기본)
- float: 실수형 (예: float16, float32, float64)
- → 소수점을 포함하는 데이터 (float64가 기본)
📌 활용: 평균, 합계, 표준편차, 수학 연산 가능
2) 문자열/범주형 (Text / Categorical Types)
- object: 문자열, 혹은 혼합된 데이터(숫자+문자 등)를 저장하는 일반 타입(문자열이 들어오면 자동으로 object dtype으로 잡힘)
- string: 판다스 1.0 이후 도입된 전용 문자열 타입
- → object보다 일관성이 있고 문자열 메서드 사용에 안전함
- category: 범주형 데이터 (카테고리) 저장용 특수 타입→ 순서(ordered=True)를 지정하면 크기 비교 가능
- → 고유값을 코드로 매핑해 메모리 절약 & 연산 속도 향상
📌 활용: 성별, 지역, 직업 등 집단을 나타내는 데이터
3) 불리언 (Boolean Type)
- bool: True / False 값 저장
- 최근엔 boolean (nullable) 타입도 있음 → 결측치(NaN)와 함께 사용 가능
📌 활용: 조건 필터링, 마스크 연산
4) 날짜/시간 (Datetime Types)
- datetime64[ns]: 날짜/시간 데이터 (년, 월, 일, 시, 분, 초, 나노초 단위)
- timedelta[ns]: 두 시점 사이의 차이(시간 간격)
- period: 일정한 기간(예: 월별, 연도별)
📌 활용: 시계열 분석, 날짜 인덱스, 리샘플링
5) 결측치/특수값
- NaN: 수치형에서의 결측치 (Not a Number)
- NaT: 날짜형에서의 결측치 (Not a Time)
- None: 파이썬 기본 결측값 (object 컬럼에서 보통 NaN처럼 처리됨)
dtype 확인 & 변환
- 확인: df.dtypes, df.info()
- 변환: astype() 메서드 활용
df['age'] = df['age'].astype('int')
df['gender'] = df['gender'].astype('category')
df['joined'] = pd.to_datetime(df['joined'])
정리
- 수치형(int/float) → 연산, 통계에 사용
- 문자열(object/string) → 텍스트 데이터
- 범주형(category) → 라벨/집단 구분, 메모리 효율
- 불리언(bool) → 조건 필터링
- 날짜(datetime, timedelta) → 시계열 처리
'데이터 전처리 & 시각화' 카테고리의 다른 글
| [데이터 전처리] 데이터 인덱싱과 슬라이싱 (1) | 2025.08.28 |
|---|---|
| [데이터 전처리] 데이터 불러오기 및 저장(CSV, Excel, JSON 등) (1) | 2025.08.28 |
| [데이터 전처리] 데이터 전처리는 왜 중요할까? (2) | 2025.08.28 |