[Notice] [pandas_practice_3]
DataFrame 로드
import pandas as pd
import numpy as np
df = pd.read_csv("http://bit.ly/ds-korean-idol")
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 15 non-null object
1 그룹 14 non-null object
2 소속사 15 non-null object
3 성별 15 non-null object
4 생년월일 15 non-null object
5 키 13 non-null float64
6 혈액형 15 non-null object
7 브랜드평판지수 15 non-null int64
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB
dtype('float64')
df['키'] = df['키'].fillna(-1)
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
0 |
지민 |
방탄소년단 |
빅히트 |
남자 |
1995-10-13 |
173.6 |
A |
10523260 |
1 |
지드래곤 |
빅뱅 |
YG |
남자 |
1988-08-18 |
177.0 |
A |
9916947 |
2 |
강다니엘 |
NaN |
커넥트 |
남자 |
1996-12-10 |
180.0 |
A |
8273745 |
3 |
뷔 |
방탄소년단 |
빅히트 |
남자 |
1995-12-30 |
178.0 |
AB |
8073501 |
4 |
화사 |
마마무 |
RBW |
여자 |
1995-07-23 |
162.1 |
A |
7650928 |
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
To change date type
to_datetime
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: object
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[‘날짜’]를 다시 column에 다시 대입
df['생년월일'] = 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]
<pandas.core.indexes.accessors.DatetimeProperties object at 0x113eb5210>
0 1995
1 1988
2 1996
3 1995
4 1995
5 1997
6 1995
7 1998
8 1992
9 1994
10 1989
11 1997
12 1995
13 1995
14 1993
Name: 생년월일, dtype: int64
0 10
1 8
2 12
3 12
4 7
5 9
6 8
7 8
8 12
9 3
10 3
11 3
12 7
13 6
14 3
Name: 생년월일, dtype: int64
0 13
1 18
2 10
3 30
4 23
5 1
6 9
7 26
8 4
9 22
10 9
11 30
12 21
13 8
14 9
Name: 생년월일, dtype: int64
Monday:0, Tuesday:1, Wednesday:2, Thursday:3, Friday:4, Saturday:5, Sunday:6
0 4
1 3
2 1
3 5
4 6
5 0
6 2
7 2
8 4
9 1
10 3
11 6
12 4
13 3
14 1
Name: 생년월일, dtype: int64
/var/folders/0v/dgc0jc1x1c1bq1k7s0qykzpc0000gn/T/ipykernel_32450/2417463180.py:1: FutureWarning: Series.dt.weekofyear and Series.dt.week have been deprecated. Please use Series.dt.isocalendar().week instead.
df['생년월일'].dt.weekofyear
0 41
1 33
2 50
3 52
4 29
5 36
6 32
7 35
8 49
9 12
10 10
11 13
12 29
13 23
14 10
Name: 생년월일, dtype: int64
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
0 |
지민 |
방탄소년단 |
빅히트 |
남자 |
1995-10-13 |
173.6 |
A |
10523260 |
1 |
지드래곤 |
빅뱅 |
YG |
남자 |
1988-08-18 |
177.0 |
A |
9916947 |
2 |
강다니엘 |
NaN |
커넥트 |
남자 |
1996-12-10 |
180.0 |
A |
8273745 |
3 |
뷔 |
방탄소년단 |
빅히트 |
남자 |
1995-12-30 |
178.0 |
AB |
8073501 |
4 |
화사 |
마마무 |
RBW |
여자 |
1995-07-23 |
162.1 |
A |
7650928 |
df['생일_월'] = df['생년월일'].dt.month
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
생일_월 |
0 |
지민 |
방탄소년단 |
빅히트 |
남자 |
1995-10-13 |
173.6 |
A |
10523260 |
10 |
1 |
지드래곤 |
빅뱅 |
YG |
남자 |
1988-08-18 |
177.0 |
A |
9916947 |
8 |
2 |
강다니엘 |
NaN |
커넥트 |
남자 |
1996-12-10 |
180.0 |
A |
8273745 |
12 |
3 |
뷔 |
방탄소년단 |
빅히트 |
남자 |
1995-12-30 |
178.0 |
AB |
8073501 |
12 |
4 |
화사 |
마마무 |
RBW |
여자 |
1995-07-23 |
162.1 |
A |
7650928 |
7 |
5 |
정국 |
방탄소년단 |
빅히트 |
남자 |
1997-09-01 |
178.0 |
A |
5208335 |
9 |
6 |
민현 |
뉴이스트 |
플레디스 |
남자 |
1995-08-09 |
182.3 |
O |
4989792 |
8 |
7 |
소연 |
아이들 |
큐브 |
여자 |
1998-08-26 |
-1.0 |
B |
4668615 |
8 |
8 |
진 |
방탄소년단 |
빅히트 |
남자 |
1992-12-04 |
179.2 |
O |
4570308 |
12 |
9 |
하성운 |
핫샷 |
스타크루이엔티 |
남자 |
1994-03-22 |
167.1 |
A |
4036489 |
3 |
10 |
태연 |
소녀시대 |
SM |
여자 |
1989-03-09 |
-1.0 |
A |
3918661 |
3 |
11 |
차은우 |
아스트로 |
판타지오 |
남자 |
1997-03-30 |
183.0 |
B |
3506027 |
3 |
12 |
백호 |
뉴이스트 |
플레디스 |
남자 |
1995-07-21 |
175.0 |
AB |
3301654 |
7 |
13 |
JR |
뉴이스트 |
플레디스 |
남자 |
1995-06-08 |
176.0 |
O |
3274137 |
6 |
14 |
슈가 |
방탄소년단 |
빅히트 |
남자 |
1993-03-09 |
174.0 |
O |
2925442 |
3 |
how to use apply function
df = pd.read_csv('http://bit.ly/ds-korean-idol')
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
0 |
지민 |
방탄소년단 |
빅히트 |
남자 |
1995-10-13 |
173.6 |
A |
10523260 |
1 |
지드래곤 |
빅뱅 |
YG |
남자 |
1988-08-18 |
177.0 |
A |
9916947 |
2 |
강다니엘 |
NaN |
커넥트 |
남자 |
1996-12-10 |
180.0 |
A |
8273745 |
3 |
뷔 |
방탄소년단 |
빅히트 |
남자 |
1995-12-30 |
178.0 |
AB |
8073501 |
4 |
화사 |
마마무 |
RBW |
여자 |
1995-07-23 |
162.1 |
A |
7650928 |
5 |
정국 |
방탄소년단 |
빅히트 |
남자 |
1997-09-01 |
178.0 |
A |
5208335 |
6 |
민현 |
뉴이스트 |
플레디스 |
남자 |
1995-08-09 |
182.3 |
O |
4989792 |
7 |
소연 |
아이들 |
큐브 |
여자 |
1998-08-26 |
NaN |
B |
4668615 |
8 |
진 |
방탄소년단 |
빅히트 |
남자 |
1992-12-04 |
179.2 |
O |
4570308 |
9 |
하성운 |
핫샷 |
스타크루이엔티 |
남자 |
1994-03-22 |
167.1 |
A |
4036489 |
10 |
태연 |
소녀시대 |
SM |
여자 |
1989-03-09 |
NaN |
A |
3918661 |
11 |
차은우 |
아스트로 |
판타지오 |
남자 |
1997-03-30 |
183.0 |
B |
3506027 |
12 |
백호 |
뉴이스트 |
플레디스 |
남자 |
1995-07-21 |
175.0 |
AB |
3301654 |
13 |
JR |
뉴이스트 |
플레디스 |
남자 |
1995-06-08 |
176.0 |
O |
3274137 |
14 |
슈가 |
방탄소년단 |
빅히트 |
남자 |
1993-03-09 |
174.0 |
O |
2925442 |
1-1 남자/여자의 문자열 데이터로 구성된 ‘성별’ column을 1/0으로 바꿔보기
df.loc[df['성별'] == '남자', '성별'] = 1
df.loc[df['성별'] == '여자', '성별'] = 0
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
0 |
지민 |
방탄소년단 |
빅히트 |
1 |
1995-10-13 |
173.6 |
A |
10523260 |
1 |
지드래곤 |
빅뱅 |
YG |
1 |
1988-08-18 |
177.0 |
A |
9916947 |
2 |
강다니엘 |
NaN |
커넥트 |
1 |
1996-12-10 |
180.0 |
A |
8273745 |
3 |
뷔 |
방탄소년단 |
빅히트 |
1 |
1995-12-30 |
178.0 |
AB |
8073501 |
4 |
화사 |
마마무 |
RBW |
0 |
1995-07-23 |
162.1 |
A |
7650928 |
5 |
정국 |
방탄소년단 |
빅히트 |
1 |
1997-09-01 |
178.0 |
A |
5208335 |
6 |
민현 |
뉴이스트 |
플레디스 |
1 |
1995-08-09 |
182.3 |
O |
4989792 |
7 |
소연 |
아이들 |
큐브 |
0 |
1998-08-26 |
NaN |
B |
4668615 |
8 |
진 |
방탄소년단 |
빅히트 |
1 |
1992-12-04 |
179.2 |
O |
4570308 |
9 |
하성운 |
핫샷 |
스타크루이엔티 |
1 |
1994-03-22 |
167.1 |
A |
4036489 |
10 |
태연 |
소녀시대 |
SM |
0 |
1989-03-09 |
NaN |
A |
3918661 |
11 |
차은우 |
아스트로 |
판타지오 |
1 |
1997-03-30 |
183.0 |
B |
3506027 |
12 |
백호 |
뉴이스트 |
플레디스 |
1 |
1995-07-21 |
175.0 |
AB |
3301654 |
13 |
JR |
뉴이스트 |
플레디스 |
1 |
1995-06-08 |
176.0 |
O |
3274137 |
14 |
슈가 |
방탄소년단 |
빅히트 |
1 |
1993-03-09 |
174.0 |
O |
2925442 |
df = pd.read_csv('http://bit.ly/ds-korean-idol')
#함수 먼저 정의
def male_or_female(x):
if x == '남자':
return 1
elif x == '여자':
return 0
df['성별'].apply(male_or_female)
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
Find the brand reputation index per cm. (Brand Reputation Index/Key)
# apply에 활욜한 함수 정의
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
df['성별_NEW'] = df['성별'].apply(male_or_female)
|
이름 |
그룹 |
소속사 |
성별 |
생년월일 |
키 |
혈액형 |
브랜드평판지수 |
성별_NEW |
0 |
지민 |
방탄소년단 |
빅히트 |
남자 |
1995-10-13 |
173.6 |
A |
10523260 |
1 |
1 |
지드래곤 |
빅뱅 |
YG |
남자 |
1988-08-18 |
177.0 |
A |
9916947 |
1 |
2 |
강다니엘 |
NaN |
커넥트 |
남자 |
1996-12-10 |
180.0 |
A |
8273745 |
1 |
3 |
뷔 |
방탄소년단 |
빅히트 |
남자 |
1995-12-30 |
178.0 |
AB |
8073501 |
1 |
4 |
화사 |
마마무 |
RBW |
여자 |
1995-07-23 |
162.1 |
A |
7650928 |
0 |
5 |
정국 |
방탄소년단 |
빅히트 |
남자 |
1997-09-01 |
178.0 |
A |
5208335 |
1 |
6 |
민현 |
뉴이스트 |
플레디스 |
남자 |
1995-08-09 |
182.3 |
O |
4989792 |
1 |
7 |
소연 |
아이들 |
큐브 |
여자 |
1998-08-26 |
NaN |
B |
4668615 |
0 |
8 |
진 |
방탄소년단 |
빅히트 |
남자 |
1992-12-04 |
179.2 |
O |
4570308 |
1 |
9 |
하성운 |
핫샷 |
스타크루이엔티 |
남자 |
1994-03-22 |
167.1 |
A |
4036489 |
1 |
10 |
태연 |
소녀시대 |
SM |
여자 |
1989-03-09 |
NaN |
A |
3918661 |
0 |
11 |
차은우 |
아스트로 |
판타지오 |
남자 |
1997-03-30 |
183.0 |
B |
3506027 |
1 |
12 |
백호 |
뉴이스트 |
플레디스 |
남자 |
1995-07-21 |
175.0 |
AB |
3301654 |
1 |
13 |
JR |
뉴이스트 |
플레디스 |
남자 |
1995-06-08 |
176.0 |
O |
3274137 |
1 |
14 |
슈가 |
방탄소년단 |
빅히트 |
남자 |
1993-03-09 |
174.0 |
O |
2925442 |
1 |
Application of lambda function
df = pd.read_csv('http://bit.ly/ds-korean-idol')
f = lambda x : 1 if x == '남자' else 0
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
Application of using simple one
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['키'].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
map mapping vlaues
my_map = {
'남자' : 1,
'여자' : 0
}
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
댓글남기기