7 분 소요

[Notice] [pandas_practice_3]

DataFrame 로드

import pandas as pd
import numpy as np
df = pd.read_csv("http://bit.ly/ds-korean-idol")
df.info()
<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
df['키'].dtypes
dtype('float64')
df['키'].astype(int)
df['키'] = df['키'].fillna(-1)
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
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['키'].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

To change date type

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: 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['생년월일'])
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['생년월일'].dt
<pandas.core.indexes.accessors.DatetimeProperties object at 0x113eb5210>
df['생년월일'].dt.year
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
df['생년월일'].dt.month
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
df['생년월일'].dt.day
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

df['생년월일'].dt.dayofweek
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
df['생년월일'].dt.weekofyear
/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
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
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
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수 생일_월
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')
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
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
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
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)
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수 성별_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
df['성별'].apply(f)
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
}
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

댓글남기기