Pandas 기초는 여기로!
데이터 로딩
# 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 |
댓글