본문 바로가기
AI/- Library

[Pandas] 데이터 전처리 기초 정리

by Yoojacha 2023. 2. 16.

Pandas 기초는 여기로!

 

[Pandas] - 기초, 인덱싱

라이브러리 불러오기 import pandas as pd 데이터 불러오기 및 저장 # csv 파일 읽기 df = pd.read_csv('./sample1.csv', sep=',', encoding='cp949', na_values=['nan으로 바꿀 특정 값']) # csv 로 파일 저장 pd.to_csv('./filename.csv

kyportfolio.tistory.com


데이터 로딩

# csv 파일 받기

"""
- 디렉토리위치와 파일명
- sep = 구분자
- index_col = 인덱스 컬럼
- encoding = 인코딩 방식
- header = 컬럼명으로 바꿔줄 행
"""

seoul_moving = pd.read_csv('1.2 seoul_moving_month_4.csv',
                            sep = ",", 
                            index_col = 0, 
                            encoding = 'UTF-8'.
                            header = 1)

 

컬럼명 수정

df.rename(columns={"기존컬럼명1":'바꿀컬럼명1', '기존컬럼명2':'바꿀컬럼명2'}, inplace=True) # 딕셔너리를 인자로 줌

 

타입 변경

df = df.astype({'타입바꿀컬럼명':'타입명'}) # 딕셔너리를 인자로 줌

 

범주형 데이터 새로운 값 교체

# 자치구 코드를 활용해 모든 행의 자치구의 값을 교체
df['자치구'] = df['자치구'].map({
                                '기존값': '바꿀값',
                                '01': '종로구',
                                '02': '중구',
                                '03': '용산구',
                                '04': '성동구',
                                '05': '광진구',
                                '06': '동대문구',
                                '07': '중랑구',
                                '08': '성북구',
                                '09': '강북구',
                                '10': '도봉구',
                                '11': '노원구',
                                '12': '은평구',
                                '13': '서대문구',
                                '14': '마포구',
                                '15': '양천구',
                                '16': '강서구',
                                '17': '구로구',
                                '18': '금천구',
                                '19': '영등포구',
                                '20': '동작구',
                                '21': '관악구',
                                '22': '서초구',
                                '23': '강남구',
                                '24': '송파구',
                                '25': '강동구'
                             })

# 성별을 0과 1로 구분
df['Gen'].map({'Male': 1, 'Female': 0})

# 특정값인지 아닌지에 따라 0과 1 구분
df["새로운 컬럼명"] = df["컬럼명"].apply(lambda x : 0 if x == "특정값" else 1)

 

문자열 처리

# address 컬럼의 문자열 값에 value 가 포함되어 있는지 확인
df['address'].str.contains(value)

# 컬럼명1 의 문자열 값 앞 3글자만 자른 후 재할당
df['컬럼명1'] = df["값이 문자열인 컬럼명1"].str.slice(start=0, stop=3)

 

중복값 확인

df.loc[ df.duplicated() ]

 

중복값 제거

df.drop_duplicates(ignore_index=True, inplace = True)
df.drop_duplicates(['컬럼명'], ignore_index=True, inplace = True)

 

잘못된 값 교체

df.replace("잘못된 값", '바꿀 값', inplace=True)

 

조건에 따른 값 교체

# np.where(조건, 참일 때 값, 거짓일 때 값)
df['컬럼명'] = np.where(df['컬럼명'] <=2, '행복', '불행')

# .isin 메소드 활용
data.loc[data['JobSatisfaction'].isin([1,4])]

 

컬럼값 구간별로 범주화

df['temp'] = pd.cut(df['temp'], bins =[0, 10, 20, 30] , labels = ['cool','warm','hot'])

 

결측치 확인

# 특정 컬럼의 결측값을 제외한 최빈값 확인 (기본값 dropna=True)
df['column'].value_counts(dropna=True)

# 전체 컬럼의 결측 값 확인
df.isna().sum()

 

결측치 처리 (채우기, foward fill, backward fill)

# 특정 컬럼을 그냥 제거
drop_cols = ['제거할컬럼명1', '제거할컬럼명2', '제거할컬럼명3', '제거할컬럼명4']
titanic.drop(drop_cols, axis=1, inplace=True)

# column_name 컬럼(변수)에 NaN이 포함된 행(axis=0) 제거
df.dropna(subset=['column_name'], axis=0, inplace=True)

# NaN 가 포함된 모든 열(axis=1) 제거
df.dropna(axis=1, inplace=True)
# NaN 값을 특정 value(최빈값) 로 채우기
df['column'].fillna(value, inplace=True)

# NaN 값을 바로 앞의 값으로 채우기
df['column'].fillna(method='ffill', inplace=True)

# NaN 값을 바로 뒤의 값으로 채우기
df['column'].fillna(method='bfill', inplace=True)

 

결측치 선형 보간법

df['column'].interpolate(method='linear', inplace=True)

 

가변수화 (one-hot-encoding)

dummy_cols = ['범주형컬럼1', '범주형컬럼2', '범주형컬럼3']
df = pd.get_dummies(df, columns=dummy_cols, drop_first=True)

 

데이터 이어 붙이기

"""
- 리스트 안에 Dataframe 2개 이상 넣기
- 축 선택 (0, 1)
- 조인 방법 선택 ('inner', 'outer')
"""

df3 = pd.concat([df1, df2], axis = 0, join = 'inner')

 

데이터 병합

df = pd.merge(df1, df2, how = 'inner', on = '공통의 컬럼명')

 

인덱스 설정

df.reset_index(drop=True, inplace = True) # drop 파라미터는 기존 인덱스를 지울지에 대한 것

df.set_index()

 

그룹화

df_sum = df.groupby(by=['이컬럼을 기준으로 집계'], as_index = False).sum()
df_mean = df.groupby(by=['이컬럼을 기준으로 집계'], as_index = False).mean()
df_median = df.groupby(by=['컬럼1', '컬럼2'], as_index = False).median()
df_nunique = df.groupby("이컬럼을 기준으로 집계")["특정컬럼명"].nunique()
df_agg = df.groupby('컬럼명', as_index=False)[['컬럼명']].agg(['max', 'min', 'mean', 'std'])

 

피봇테이블

df.pivot_table(
			   
               index=None  ## 행에 사용할 컬럼,
               columns=None # 열에 사용할 컬럼,
               values=None # 각 Cell을 어떤 숫자로 계산할지,
               aggfunc='mean' # 집계 함수 적용
               
               # 추가 옵션
               fill_value=None,
               margins=False,
               dropna=True,
               margins_name='All',
               observed=False,
               sort=True
               
              )

 

새로운 csv 파일 생성

df.to_csv("new_df.csv", index = False)

추후에 주머니 속의 머신러닝 책이나 데이터 사이언스 스쿨 웹사이트에 있는 내용을 참고해서 데이터 전처리를 위한 방법을 딥하게 정리하겠습니다!

'AI > - Library' 카테고리의 다른 글

[ Pandas ] 시계열 데이터  (0) 2023.02.17
[Pandas] 연산 방법 정리  (0) 2023.02.16
[Numpy] 연산 방법 정리  (0) 2023.02.16
[Numpy] ndarray 인덱싱, 슬라이싱, 정렬  (0) 2023.02.16
[Pandas] - 기초, 인덱싱  (0) 2023.02.15
[Numpy] ndarray 생성, 추가, 수정, 삭제  (0) 2023.02.11

댓글