강의/데이터 분석 입문

[데이터 분석 입문] 데이터 전처리 | 기본 문법

da-hong 2025. 5. 29. 21:04

💡 데이터의 목적 -> "설득" -> 데이터를 잘 전달해야 함 -> "시각화" -> 목적에 맞는 데이터 "전처리" 

 

데이터를 불러와서 전처리할 때 자주 사용할 것 같은 기본적인 문법들을 정리해 보았다. 

 

Pandas 라이브러리 

- 파이썬에서 데이터 조작과 분석을 위한 가장 핵심적인 라이브러리. 전처리 작업의 핵심 도구

pip install pandas  # 설치 (터미널/명령프롬프트에서)
import pandas as pd  # 라이브러리 import

 

데이터 구조 

- Series (1차원 데이터) : 하나의 컬럼으로 이루어진 1차원 배열

- DataFrame (2차원 데이터): 여러 개의 컬럼으로 이루어진 2차원 테이블. 여러 개의 Series가 모여서 만들어진 구조

# 리스트로부터 Series 생성
ages = pd.Series([25, 30, 35, 28, 32])

# 딕셔너리로부터 DataFrame 생성
data = {
    'name': ['김철수', '이영희', '박민수', '최지은'],
    'age': [25, 30, 35, 28],
    'city': ['서울', '부산', '대구', '인천']
}
df = pd.DataFrame(data)

 

데이터 불러오기

# pd.read_확장자('파일경로/파일명.확장자')

# 엑셀 불러오기
pd.read_excel('./파일명.xlsx') # ./ ==> 현재 내가 있는 위치라는 의미

# 주요 옵션들과 함께 읽기
df = pd.read_csv('data.csv',
                 encoding='utf-8', # 한글 인코딩
                 index_col=0, # 첫 번째 컬럼을 인덱스로
                 header=0,  # 첫 번째 행을 컬럼명으로
                 sep=',',  # 구분자 지정
                 na_values=['N/A', ''])  # 결측치로 처리할 값들

 

데이터 저장하기 

# pd.to_확장자(’파일경로/파일명.확장자’, index = False or True)
df.to_csv('./newfile.csv', index = False)

 

데이터 정보 확인

data.head()  # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3)  # ()안에 숫자만큼 데이터를 보여줌

data.info()  # 인덱스, 컬럼명, 컬럼의 데이터 개수, 데이터 타입

data.describe()  # 숫자값 기초통계량(개수, 평균, 표준편차, 사분위, 중앙값)
                 # describe()도 데이터프레임이므로 체인룰로 활용 가능하다

 

 

데이터 선택

  • 열(Column) 선택
# 컬럼 확인하기
df.columns

# 각 컬럼 선택하기 
df['컬럼명']
df[ ['컬럼명1','컬럼명2','컬럼명3'] ]

# 모든 컬럼명 변경하기 
df.columns = ['컬럼명1','컬럼명2']

# 특정 컬럼명 변경하기
df.rename(columns={'컬럼A': '컬럼B'})

# 새로운 컬럼 추가하기
df['컬럼C'] = data  # 컬럼C의 모든 행에 data 값이 적용됨
df['컬럼C'] = [1,2,3]  # 전체 행 수에 맞춰서 입력해줘야함 
df['컬럼C'] = df['컬럼A'] / df['컬럼B'] + 1  # 여러 조건 및 계산식의 산출 값으로도 추가가 가능

 

  •  행(Row) 선택
    • .iloc[행번호, 열번호] : 슬라이싱과 같은 문법 - 마지막 인덱스 포함 X
    • .loc['행이름', '열이름']: 라벨 기반으로 직관적임 - 마지막 인덱스 포함 O (loc 추천) 
# .iloc: 인덱스 번호로 선택하기
df.iloc[1:4, 0:2]  # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택 

# .loc: 이름으로 선택하기
df.loc[1:4, 'A':'B']  # 레이블 1부터 4까지의 행과 'A'부터 'B'까지의 열 선택

 

인덱스 

# 사용자가 직접 인덱스를 설정한 데이터프레임 생성 (기본은 정수 인덱스) 
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3'])

# 특정 인덱스의 행에 접근
row = df.loc['idx2']

# 인덱스를 기준으로 데이터프레임 정렬
sorted_df = df.sort_index()

# df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기
data = df.set_index('컬럼명')

#인덱스 확인하기
data.index

#리스트 형태를 활용해서 새로운 인덱스 입력
data.index = ['1번' , '2번' , '3번']

 

불리언 인덱싱

- 데이터 프레임 안에 [ ] 형태의 조건을 넣어 데이터를 필터링하는 방법 

- 조건을 변수로 할당해서 사용하면 깔끔하고 수정하기 편함 

# 여러 조건으로 필터링 
df[(df['age'] >= 30) & (df['gender'] == 'Male')]  # 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링

# 조건에 따른 특정 컬럼 필터링
df.loc[df['age'] >= 30, 'name']  # 'age' 열에서 30세 이상인 경우의 'name' 열만 선택

# isin()을 활용한 필터링
df[df['gender'].isin(['Male', 'Female'])]  # 'gender' 열에서 'Male' 또는 'Female'인 행 필터링

 

데이터 타입 

# 데이터 타입 확인
df['컬럼명'].dtype   

# 데이터 타입 변경
df['컬럼명'].astype(타입)  # 변환 불가능한 값이 있으면 에러남
pd.to_numeric(df['컬럼명'], errors='coerce')  # 문자열을 숫자로 변환하되, 변환할 수 없는 값은 NaN으로 처리
pd.to_datetime(df['컬럼명'])  # 날짜 데이터로 변환 (날짜 간 계산 가능)
df['날짜 데이터'].dt.year  # 날짜에서 년(year), 월(month), 일(days), 요일(day_name)등 추출 가능

 

데이터 병합

  •  concat( )  : 데이터프레임을 위아래로 혹은 좌우로 연결
pd.concat([df1, df2], axis=0)  # 위아래로 연결 (기본값)
pd.concat([df1, df2], axis=1)  # 좌우로 연결
# 행, 열 크기가 같지 않으면 남는 값은 NaN으로 표현됨
  •  merge( )  : 공통된 열이나 인덱스를 기준으로 데이터를 병합
pd.merge(left_df, right_df, on='병합의 기준이 되는 열', how='inner/outer/left/right')
# 'inner' : 공통된 열을 기준으로 교집합
# 'outer' : 공통된 열을 기준으로 합집합
# 'left'  : 왼쪽 데이터프레임의 모든 행을 포함하고 오른쪽 데이터프레임은 공통된 열에 해당하는 행만 포함
# 'right' : 오른쪽 데이터프레임의 모든 행을 포함하고 왼쪽 데이터프레임은 공통된 열에 해당하는 행만 포함

 

데이터 집계 

  •   groupby( )  : 그룹화의 기준이 되는 열이 인덱스가 됨 

 

  •  pivot_table( )  : 데이터를 재구성하여 요약, 집계된 정보를 보여주는 테이블

 

데이터 정렬 

df.sort_values('컬럼명') # 특정 열을 기준으로 오름차순 정렬
df.sort_values('컬럼명', ascending=False) # '특정 열을 기준으로 내림차순 정렬

df.sort_index() # 인덱스를 기준으로 오름차순 정렬

 

결측치, 중복 데이터

- 도메인 지식을 활용해 결측치를 적절하게 채워 넣어야 함 

df.isnull().sum()  # 결측치 확인 + 결측치 개수
df.dropna()  # 결측치 제거 

df.duplicated()  # 중복 데이터 확인
df.drop_duplicates(subset=['컬럼1', '컬럼2'])  # 중복 데이터 제거 (subset옵션: 특정 열 기준 중복 제거)

 


 

 

User Guide — pandas 2.2.3 documentation

User Guide The User Guide covers all of pandas by topic area. Each of the subsections introduces a topic (such as “working with missing data”), and discusses how pandas approaches the problem, with many examples throughout. Users brand-new to pandas sh

pandas.pydata.org

 

📎 User Guide - pandas documentation

- 판다스 메서드, 속성들을 모두 외울 필요는 없음

- 어떤 기능이 있구나만 인지하고 있고, 특정 기능이 필요할 때 Pandas 공식 문서의 User Guide를 참고하자