String Manipulation이란, 문자열 데이터 형태 및 타입 등을 변환하는 것
오늘은 파이썬을 활용해 String Manipulation을 수행해 볼 것이다. 이는 데이터 분석 수행에서 필수적으로 행하는 것 중 하나다. String 데이터를 처리할 때는, 웬만해선 데이터 통일화 작업이 요해지기 때문이다.
그 중에서도 SM에 가장 많이 쓰이는 함수(Replace, Apply, Split)를 이용해 문자열 데이터의 형태 & 타입을 변환하는 예시를 학습/정리할 예정이다.
목차
특정 데이터타입의 컬럼값만 추출하여, 데이터 형태 및 타입 변경
describe를 통한 summary statistics
In [ ]:
# 필요한 라이브러리를 import 합니다.
import pandas as pd
import numpy as np
import io
from google.colab import files
In [ ]:
# 데이터를 로드합니다.
uploaded = files.upload()
Saving finance.csv to finance (2).csv
In [ ]:
# 데이터를 로드합니다.
column_headers = ['분기','매출','영업이익','영업이익(발표)','세전계속사업이익',
'당기순이익','당기순이익(지배)','당기순이익(비지배)','자산총계','부채총계',
'자본총계','자본총계(지배)','자본총계(비지배)']
df=pd.read_csv(io.BytesIO(uploaded['finance.csv']),encoding='cp949',names=column_headers)
In [ ]:
# 데이터의 정보를 확인합니다.
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 분기 5 non-null object
1 매출 5 non-null object
2 영업이익 5 non-null object
3 영업이익(발표) 5 non-null object
4 세전계속사업이익 5 non-null object
5 당기순이익 5 non-null int64
6 당기순이익(지배) 5 non-null int64
7 당기순이익(비지배) 5 non-null int64
8 자산총계 5 non-null object
9 부채총계 5 non-null int64
10 자본총계 5 non-null int64
11 자본총계(지배) 5 non-null int64
12 자본총계(비지배) 2 non-null float64
dtypes: float64(1), int64(6), object(6)
memory usage: 648.0+ bytes
In [ ]:
df
Out[ ]:
분기 | 매출 | 영업이익 | 영업이익(발표) | 세전계속사업이익 | 당기순이익 | 당기순이익(지배) | 당기순이익(비지배) | 자산총계 | 부채총계 | 자본총계 | 자본총계(지배) | 자본총계(비지배) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20년 1분기 | 12,628 | 3,991 | 3991 | 4452 | 3245 | 3228 | 17 | 108,464 | 25940 | 82524 | 81965 | NaN |
1 | 20년 2분기 | 13,222 | 3,825 | 3,825 | 4,503 | 3221 | 3208 | 13 | 106314 | 20691 | 85623 | 85049 | NaN |
2 | 20년 3분기 | , | 2,523 | 2,523 | 1794 | 1183 | 1198 | -15 | 107121 | 20062 | 87059 | 86506 | NaN |
3 | 20년 4분기 | 11,784 | 3,150 | 3150 | 4156 | 2939 | 2930 | 9 | 108594 | 24862 | 83732 | 83170 | 562.0 |
4 | 21년 1분기 | 13,188 | 3,947 | 3947 | 4020 | 2935 | 2931 | 4 | 110282 | 23386 | 86896 | 86330 | 566.0 |
In [ ]:
# String Manipulation (1)-1. replace를 활용해 값 형태 및 타입을 변경하는 함수를 만듭니다.
def toInt(ob):
return int(ob.replace(',',''))
# 위에서 만든 함수, apply를 활용해 데이터의 타입을 변경합니다.
df['세전계속사업이익']=df['세전계속사업이익'].apply(toInt)
In [ ]:
# String Manipulation (1)-2. replace를 활용해 값을 NaN 값으로 변경하는 함수를 만듭니다.
df.loc[(df.분기=='20년 3분기'),'당기순이익(비지배)']=df.loc[(df.분기==' 20년 3분기'),'당기순이익(비지배)'].replace(-15, np.nan)
df
Out[ ]:
분기 | 매출 | 영업이익 | 영업이익(발표) | 세전계속사업이익 | 당기순이익 | 당기순이익(지배) | 당기순이익(비지배) | 자산총계 | 부채총계 | 자본총계 | 자본총계(지배) | 자본총계(비지배) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20년 1분기 | 12628 | 3991 | 3991 | 4452 | 3245 | 3228 | 17.0 | 108464 | 25940 | 82524 | 81965 | NaN |
1 | 20년 2분기 | 13222 | 3825 | 3825 | 4,503 | 3221 | 3208 | 13.0 | 106314 | 20691 | 85623 | 85049 | NaN |
2 | 20년 3분기 | 111 | 2523 | 2523 | 1794 | 1183 | 1198 | NaN | 107121 | 20062 | 87059 | 86506 | NaN |
3 | 20년 4분기 | 11784 | 3150 | 3150 | 4156 | 2939 | 2930 | 9.0 | 108594 | 24862 | 83732 | 83170 | 562.0 |
4 | 21년 1분기 | 13188 | 3947 | 3947 | 4020 | 2935 | 2931 | 4.0 | 110282 | 23386 | 86896 | 86330 | 566.0 |
In [ ]:
# String Manipulation (2) split를 활용해 값 형태 및 타입을 변경하는 함수를 만듭니다. (매출)
df[['a','b']]=df['매출'].str.split(',', n=2, expand=True)
df['매출']=df['a']+df['b']
df=df.drop(['a','b'], axis=1)
df['매출']=df['매출'].astype('int')
In [ ]:
df
Out[ ]:
분기 | 매출 | 영업이익 | 영업이익(발표) | 세전계속사업이익 | 당기순이익 | 당기순이익(지배) | 당기순이익(비지배) | 자산총계 | 부채총계 | 자본총계 | 자본총계(지배) | 자본총계(비지배) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20년 1분기 | 12628 | 3,991 | 3991 | 4452 | 3245 | 3228 | 17.0 | 108,464 | 25940 | 82524 | 81965 | NaN |
1 | 20년 2분기 | 13222 | 3,825 | 3,825 | 4503 | 3221 | 3208 | 13.0 | 106314 | 20691 | 85623 | 85049 | NaN |
2 | 20년 3분기 | 111 | 2,523 | 2,523 | 1794 | 1183 | 1198 | NaN | 107121 | 20062 | 87059 | 86506 | NaN |
3 | 20년 4분기 | 11784 | 3,150 | 3150 | 4156 | 2939 | 2930 | 9.0 | 108594 | 24862 | 83732 | 83170 | 562.0 |
4 | 21년 1분기 | 13188 | 3,947 | 3947 | 4020 | 2935 | 2931 | 4.0 | 110282 | 23386 | 86896 | 86330 | 566.0 |
In [ ]:
# String Manipulation (3) apply를 활용해 값 형태 및 타입을 변경해봅니다.
# 1. 데이터를 재로드한 후, 데이터타입이 object인 컬럼만 추출합니다. ('분기'만 제외)
df=pd.read_csv(io.BytesIO(uploaded['finance.csv']),encoding='cp949',names=column_headers)
columns_list=df.select_dtypes(include='object').columns.tolist()[1:]
# 앞서 정의한 함수를 활용해, 데이터형태 및 타입을 변환합니다.
for i in columns_list:
ab=df.loc[:,i]
df.loc[:,i]=ab.apply(toInt)
# summary statistics 확인합니다.
df.describe()
Out[ ]:
매출 | 영업이익 | 영업이익(발표) | 세전계속사업이익 | 당기순이익 | 당기순이익(지배) | 당기순이익(비지배) | 자산총계 | 부채총계 | 자본총계 | 자본총계(지배) | 자본총계(비지배) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.00000 | 5.00000 | 5.000000 | 2.000000 |
mean | 10186.600000 | 3487.200000 | 3487.200000 | 3785.000000 | 2704.600000 | 2699.000000 | 5.600000 | 108155.000000 | 22988.20000 | 85166.80000 | 84604.000000 | 564.000000 |
std | 5662.417576 | 636.931079 | 636.931079 | 1131.079131 | 863.422724 | 851.338358 | 12.481987 | 1522.396795 | 2560.38419 | 1988.82596 | 1988.427897 | 2.828427 |
min | 111.000000 | 2523.000000 | 2523.000000 | 1794.000000 | 1183.000000 | 1198.000000 | -15.000000 | 106314.000000 | 20062.00000 | 82524.00000 | 81965.000000 | 562.000000 |
25% | 11784.000000 | 3150.000000 | 3150.000000 | 4020.000000 | 2935.000000 | 2930.000000 | 4.000000 | 107121.000000 | 20691.00000 | 83732.00000 | 83170.000000 | 563.000000 |
50% | 12628.000000 | 3825.000000 | 3825.000000 | 4156.000000 | 2939.000000 | 2931.000000 | 9.000000 | 108464.000000 | 23386.00000 | 85623.00000 | 85049.000000 | 564.000000 |
75% | 13188.000000 | 3947.000000 | 3947.000000 | 4452.000000 | 3221.000000 | 3208.000000 | 13.000000 | 108594.000000 | 24862.00000 | 86896.00000 | 86330.000000 | 565.000000 |
max | 13222.000000 | 3991.000000 | 3991.000000 | 4503.000000 | 3245.000000 | 3228.000000 | 17.000000 | 110282.000000 | 25940.00000 | 87059.00000 | 86506.000000 | 566.000000 |
'데이터 공부 > Python' 카테고리의 다른 글
Pandas - 고객 구매 데이터 데이터 전처리 연습 (0) | 2021.08.19 |
---|---|
05. 데이터 시각화 (0) | 2021.06.04 |
03. 데이터 셋 병합 (Concat, Merge) (0) | 2021.06.01 |
02. 데이터 Load, 라이브러리 import (0) | 2021.06.01 |
01. Pandas 기본사용법 / Ipynb 파일 -> HTML 파일 변환 방법 (0) | 2021.06.01 |