본문 바로가기

카테고리 없음

[패스트캠퍼스 수강 후기] 데이터분석 인강 100% 환급 챌린지 12회차 미션

21. ch02. pandas - 전처리 - 06. Series의 type 변환 -
26. ch02. pandas - 전처리 - 11. select_dtypes



21. ch02. pandas - 전처리 - 06. Series의 type 변환
1. Series의 Type

df.info()
통해 확인 가능.

object: 일반 문자열 타입
float: 실수
int: 정수
category: 카테고리
datetime: 시간



1-2. type 변환
astype 메소드 사용.
series별로(column)별로 변환.

df.['키'].dtypes 데이터 타입을 알아보는 것.

df['키'].astype(int) 정수형으로 변환.
-> NaN 값 있을 때는 변환 X

fillna로 빈값 채운 후에 변환 가능

df['키'] = df['키'].fillna(-1)

df['키'].astype(int)
>0 173
1 177
2 180
3 178
4 162
5 178
6 182
7 -1
8 179
9 167
10 -1
11 183
12 175
13 176
14 174
Name: 키, dtype: int64


22. ch02. pandas - 전처리 - 07. 시간을 다루는 datetime 타입

1-3. 날짜 변환 (datetime타임)
판다스 메소드 to_datetime


pd.to_datetime(df['생년월일'])
>0 1995-10-13
1 1988-08-18
2 1996-12-10
3 1995-12-30
4 1995-07-23
5 1997-09-01
6 1995-08-09
7 1998-08-26
8 1992-12-04
9 1994-03-22
10 1989-03-09
11 1997-03-30
12 1995-07-21
13 1995-06-08
14 1993-03-09
Name: 생년월일, dtype: datetime64[ns]

변환된 것을 다시 df['생년월일']에 넣어줘야 변환 완료.

df['생년월일'] = pd.to_datetime(df['생년월일'])

Why 변환?
월, 일, 요일 등등의 날짜 정보 세부적 추출.

df['생년월일'].dt.year
df['생년월일'].dt.month
df['생년월일'].dt.day
df['생년월일'].dt.hour
df['생년월일'].dt.minute
df['생년월일'].dt.second
월요일: 0 화요일: 1, 수요일: 2, 목요일: 3, 금요일: 4, 토요일: 5, 일요일: 6
df['생년월일'].dt.dayofweek
df['생년월일'].dt.weekofyear


df['생일_년'] = df['생년월일'].dt.year
df['생일_월'] = df['생년월일'].dt.month
df['생일_일'] = df['생년월일'].dt.day


23. ch02. pandas - 전처리 - 08. apply

1. apply

apply는 Series나 DataFrame에 좀 더 구체적인 로직을 적용하고 싶을 때

apply를 적용하기 위해서는 함수를 먼저 정의
apply는 정의한 로직 함수를 인자로 넘겨줌

df.loc[df['성별'] == '남자', '성별'] = 1
df.loc[df['성별'] == '여자', '성별'] = 0


1-1. (목표) 남자/ 여자의 문자열 데이터로 구성된 '성별' column을 1 / 0 으로 바꿔보기.

남자: 1 여자: 0 기타: -1
반드시 return 값이 존재해야함.

# 먼저 apply에 활용할 함수를 정의합니다.

def male_or_female(x): x값이 넘어온다는 것.
if x == '남자':
return 1
elif x == '여자':
return 0

df['성별'].apply(male_or_female)

df['new_성별'] = df['성별'].apply(male_or_female) 대입시켜줘야 최종 적용

1-2. (목표) cm당 브랜드 평판지수 (브랜드평판지수/ 키)


단일 시리즈(column)이 아니라 DataFrame 통째로 넘겨줘야함.

def cm_to_brand(df):
value = df['브랜드평판지수'] / df['키']
return value


그리고
한 행씩 넘겨줘.

df.apply(cm_to_brand, axis=1)
>0 60617.857143
1 56027.949153
2 45965.250000
3 45356.747191
4 47198.815546
5 29260.308989
6 27371.321997
7 NaN
8 25503.950893
9 24156.128067
10 NaN
11 19158.617486
12 18866.594286
13 18603.051136
14 16812.885057
dtype: float64

데이터프레임 전체에 apply 할 때는 axis 지정을 해주기
series(column)에 apply 할 때는 axis 지정은 필요없지만 return 주는 것에 주의!


24. ch02. pandas - 전처리 - 09. lambda, map

2. lambda 함수 적용

lambda는 1줄로 작성하는 간단 함수식
return을 별도 표시하지 X

f = lambda x: 1 if x == '남자' else 0


df['키'].apply(lambda x: x / 2)
>0 86.80
1 88.50
2 90.00
3 89.00
4 81.05
5 89.00
6 91.15
7 NaN
8 89.60
9 83.55
10 NaN
11 91.50
12 87.50
13 88.00
14 87.00
Name: 키, dtype: float64

df['키/2'] = df['키'].apply(lambda x: x / 2)
키/2 칼럼 만들어 대입

df['키'].apply(lambda x : x ** 2)
>0 30136.96
1 31329.00
2 32400.00
3 31684.00
4 26276.41
5 31684.00
6 33233.29
7 NaN
8 32112.64
9 27922.41
10 NaN
11 33489.00
12 30625.00
13 30976.00
14 30276.00
Name: 키, dtype: float64

제곱값

복잡한 조건식은 함수로, 간단한 계산식은 lambda로

3. map - 값을 매핑

my_map = {
'남자': 1,
'여자': 0
}

dictionary 형태로 활용. 키 벨류.

df['성별'].map(my_map)
0 1
1 1
2 1
3 1
4 0
5 1
6 1
7 0
8 1
9 1
10 0
11 1
12 1
13 1
14 1
Name: 성별, dtype: int64


my_map = {
'남자': 'male',
'여자': 'female'
}

df['성별'].map(my_map)


25. ch02. pandas - 전처리 - 10. 데이터프레임의 산술연산

1. column과 column 간 연산 (+, -, *, /, %)

df['통계'] + df['미술'] + df['체육']
>0 180
1 190
2 210
3 280
4 270
dtype: int64

df['통계'] - df['미술']
df['통계'] * df['미술']
df['통계'] / df['미술']
df['통계'] % df['미술']


2. column과 숫자 간 연산

df['통계'] + 10
df['통계'] - 10
df['통계'] * 10
df['통계'] / 10
df['통계'] % 10

3. 복합 연산

df['통계미술합계'] = df['통계'] + df['미술'] + 10
df['통계'] + df['미술'] - df['체육']
df.mean(axis=1) 가로 방향 평균
df.mean(axis=0) 세로 방향 평균

4 mean(), sum()을 axis 기준으로 연산

df.sum(axis=0) 행 합
df.mean(axis=0) 행 평균
df.sum(axis=1) 열 합
df.mean(axis=1) 열 평균

5. NaN 값 존재 연산

df = pd.DataFrame({'통계': [60, 70, np.nan , 85, 75], '미술': [50, np.nan , 80, 100, 95], '체육': [70, 65, 50, np.nan , 100] })

df['통계'] / 2
>0 30.0
1 35.0
2 NaN
3 42.5
4 37.5
Name: 통계, dtype: float64

NaN 값 포함 -> NaN 값이 나옴

df['통계'] / np.nan
>0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
Name: 통계, dtype: float64
전부 NaN 값

6. DataFrame 과 DataFrame 간 연산

문자열 포함 DataFrame -> error
문자열 제거해줘야함

column 순서 바뀌어 있는 경우 (컬럼명이 같으면 순서 바뀌어도 알아서 연산해줌)

df1
>미술 통계
0 10 60
1 20 70
2 30 80
3 40 90
4 50 100

df2
>통계 미술
0 10 60
1 20 70
2 30 80
3 40 90
4 50 100

df1 + df2
>미술 통계
0 70 70
1 90 90
2 110 110
3 130 130
4 150 150

행의 갯수 다른 경우
미술 통계
0 70.0 70.0
1 90.0 90.0
2 110.0 110.0
3 130.0 130.0
4 150.0 150.0
5 NaN NaN

행 갯수 많은 쪽 -> NaN 으로 표시

26. ch02. pandas - 전처리 - 11. select_dtypes

1. 데이터 타입별 column 선택 (select_dtypes)

1-1. 문자열이 있는 column 만 선택

object와 object 아닌 것 구분해서 전처리작업

df.select_dtypes(include='object') 문자열 포함된 것
df.select_dtypes(exclude='object') 문자열 포함되지 않은 것들(숫자형만)

df.select_dtypes(exclude='object') + 10 문자열 포함 안되었으니 산술연산 가능

산술연산에 오류났을 때 활용가능


df.select_dtypes(exclude='object').columns

num_cols = df.select_dtypes(exclude='object').colums




 

패스트캠퍼스 데이터분석 강의 링크

bit.ly/3imy2uN

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online. | 패스트캠퍼스

왕초보도 진짜 데이터 분석을 하는 마법의 커리큘럼으로 파이썬 기초부터 다양한 예제를 활용한 분석까지 모두 배울 수 있는 온라인 과정입니다.

www.fastcampus.co.kr