기타
1 df = pd.read_csv("korean-idol.csv" )
이름
그룹
소속사
성별
생년월일
키
혈액형
브랜드평판지수
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
1. 데이터 타입별 column 선택 (select_dtypes)
<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
문자열이 있는 column만 선택 / 배제
df_name .select_dtypes (include = ‘object’)
df_name .select_dtypes (exclude = ‘object’)
(1) 문자열 column만 선택
1 df.select_dtypes(include = 'object' )
이름
그룹
소속사
성별
생년월일
혈액형
0
지민
방탄소년단
빅히트
남자
1995-10-13
A
1
지드래곤
빅뱅
YG
남자
1988-08-18
A
2
강다니엘
NaN
커넥트
남자
1996-12-10
A
3
뷔
방탄소년단
빅히트
남자
1995-12-30
AB
4
화사
마마무
RBW
여자
1995-07-23
A
5
정국
방탄소년단
빅히트
남자
1997-09-01
A
6
민현
뉴이스트
플레디스
남자
1995-08-09
O
7
소연
아이들
큐브
여자
1998-08-26
B
8
진
방탄소년단
빅히트
남자
1992-12-04
O
9
하성운
핫샷
스타크루이엔티
남자
1994-03-22
A
10
태연
소녀시대
SM
여자
1989-03-09
A
11
차은우
아스트로
판타지오
남자
1997-03-30
B
12
백호
뉴이스트
플레디스
남자
1995-07-21
AB
13
JR
뉴이스트
플레디스
남자
1995-06-08
O
14
슈가
방탄소년단
빅히트
남자
1993-03-09
O
(2) 문자열 column 배제 (문자열이 아닌 column만 선택)
1 df.select_dtypes(exclude = 'object' )
키
브랜드평판지수
0
173.6
10523260
1
177.0
9916947
2
180.0
8273745
3
178.0
8073501
4
162.1
7650928
5
178.0
5208335
6
182.3
4989792
7
NaN
4668615
8
179.2
4570308
9
167.1
4036489
10
NaN
3918661
11
183.0
3506027
12
175.0
3301654
13
176.0
3274137
14
174.0
2925442
문자열이 포함된 DataFrame의 연산으로 발생되는 Error문제는 이 방법을 이용하여 해결할 수 있다
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
D:\Anaconda\lib\site-packages\pandas\core\ops\array_ops.py in na_arithmetic_op(left, right, op, str_rep)
148 try:
--> 149 result = expressions.evaluate(op, str_rep, left, right)
150 except TypeError:
D:\Anaconda\lib\site-packages\pandas\core\computation\expressions.py in evaluate(op, op_str, a, b, use_numexpr)
207 if use_numexpr:
--> 208 return _evaluate(op, op_str, a, b)
209 return _evaluate_standard(op, op_str, a, b)
D:\Anaconda\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_numexpr(op, op_str, a, b)
120 if result is None:
--> 121 result = _evaluate_standard(op, op_str, a, b)
122
D:\Anaconda\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_standard(op, op_str, a, b)
69 with np.errstate(all="ignore"):
---> 70 return op(a, b)
71
TypeError: can only concatenate str (not "int") to str
1 df.select_dtypes(exclude = 'object' ) + 10
키
브랜드평판지수
0
183.6
10523270
1
187.0
9916957
2
190.0
8273755
3
188.0
8073511
4
172.1
7650938
5
188.0
5208345
6
192.3
4989802
7
NaN
4668625
8
189.2
4570318
9
177.1
4036499
10
NaN
3918671
11
193.0
3506037
12
185.0
3301664
13
186.0
3274147
14
184.0
2925452
(3) “문자열 column” / “비문자열 column” 의 column명을 추출
<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
1 2 obj_cols = df.select_dtypes(include = 'object' ).columns obj_cols
Index(['이름', '그룹', '소속사', '성별', '생년월일', '혈액형'], dtype='object')
1 2 num_cols = df.select_dtypes(exclude = 'object' ).columns num_cols
Index(['키', '브랜드평판지수'], dtype='object')
키
브랜드평판지수
0
173.6
10523260
1
177.0
9916947
2
180.0
8273745
3
178.0
8073501
4
162.1
7650928
5
178.0
5208335
6
182.3
4989792
7
NaN
4668615
8
179.2
4570308
9
167.1
4036489
10
NaN
3918661
11
183.0
3506027
12
175.0
3301654
13
176.0
3274137
14
174.0
2925442
2. One-hot-encoding (원핫인코딩)
One-hot-encoding: Categorical data를 dummy data로 변환시키는 방법
Dummy data로 변환 시 한개의 요소는 True (1) 로, 나머지 요소는 Flase (0) 로 변환시킨다
pd.get_dummies (df_name [ ‘col_name ’ ], prefix = “…”)
prefix: dummy data 로 분리된 새 column들의 column name에 접두사 붙이기
0 A
1 A
2 A
3 AB
4 A
5 A
6 O
7 B
8 O
9 A
10 A
11 B
12 AB
13 O
14 O
Name: 혈액형, dtype: object
1 pd.get_dummies(df['혈액형' ])
A
AB
B
O
0
1
0
0
0
1
1
0
0
0
2
1
0
0
0
3
0
1
0
0
4
1
0
0
0
5
1
0
0
0
6
0
0
0
1
7
0
0
1
0
8
0
0
0
1
9
1
0
0
0
10
1
0
0
0
11
0
0
1
0
12
0
1
0
0
13
0
0
0
1
14
0
0
0
1
1 pd.get_dummies(df['혈액형' ], prefix = '혈액형' )
혈액형_A
혈액형_AB
혈액형_B
혈액형_O
0
1
0
0
0
1
1
0
0
0
2
1
0
0
0
3
0
1
0
0
4
1
0
0
0
5
1
0
0
0
6
0
0
0
1
7
0
0
1
0
8
0
0
0
1
9
1
0
0
0
10
1
0
0
0
11
0
0
1
0
12
0
1
0
0
13
0
0
0
1
14
0
0
0
1
categorical data의 각 카테고리가 숫자형식으로 표현됐을 때 one-hot-encoding이 더 중요해지는 이유:
categorical data의 각 카테고리를 상징하는 숫자들은 그저 분류의 의미를 가질 뿐 , 숫자의 크기 자체는 아무 의미도 없고, 숫자들의 연산도 역시 무의미하다.
하지만 이를 one-hot-encoding 작업 없이 머신러닝 알고리즘에 바로 넣으면 컴퓨터가 이 숫자들을 대소비교가 가능하고 연산이 가능하는 "숫자"로 인식 하게 되므로 카테고리 간에 잘못된 관계 를 맺을 수 있음.
따라서 이런 경우에는 one-hot-encoding 작업이 꼭 필요하다
이름
그룹
소속사
성별
생년월일
키
혈액형
브랜드평판지수
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
1 2 3 4 5 6 blood_map = { 'A' : 0 , 'B' : 1 , 'AB' : 2 , 'O' : 3 , }
1 df["혈액형_code" ] = df["혈액형" ].map(blood_map)
이름
그룹
소속사
성별
생년월일
키
혈액형
브랜드평판지수
혈액형_code
0
지민
방탄소년단
빅히트
남자
1995-10-13
173.6
A
10523260
0
1
지드래곤
빅뱅
YG
남자
1988-08-18
177.0
A
9916947
0
2
강다니엘
NaN
커넥트
남자
1996-12-10
180.0
A
8273745
0
3
뷔
방탄소년단
빅히트
남자
1995-12-30
178.0
AB
8073501
2
4
화사
마마무
RBW
여자
1995-07-23
162.1
A
7650928
0
1 df["혈액형_code" ].value_counts()
0 7
3 4
2 2
1 2
Name: 혈액형_code, dtype: int64
0 0
1 0
2 0
3 2
4 0
5 0
6 3
7 1
8 3
9 0
10 0
11 1
12 2
13 3
14 3
Name: 혈액형_code, dtype: int64
1 pd.get_dummies(df[ "혈액형_code" ])
0
1
2
3
0
1
0
0
0
1
1
0
0
0
2
1
0
0
0
3
0
0
1
0
4
1
0
0
0
5
1
0
0
0
6
0
0
0
1
7
0
1
0
0
8
0
0
0
1
9
1
0
0
0
10
1
0
0
0
11
0
1
0
0
12
0
0
1
0
13
0
0
0
1
14
0
0
0
1
1 pd.get_dummies(df["혈액형_code" ], prefix = "혈액형" )
혈액형_0
혈액형_1
혈액형_2
혈액형_3
0
1
0
0
0
1
1
0
0
0
2
1
0
0
0
3
0
0
1
0
4
1
0
0
0
5
1
0
0
0
6
0
0
0
1
7
0
1
0
0
8
0
0
0
1
9
1
0
0
0
10
1
0
0
0
11
0
1
0
0
12
0
0
1
0
13
0
0
0
1
14
0
0
0
1