오늘은 python에서 문자열 데이터를 처리할 때의 꿀팁 중 하나인, 열 이름을 관리하는 방법에 대해 포스팅한다.
이 방법은 하나의 열에 여러 의미가 있는 경우, 이 열의 정보를 분리하여 새로운 N개 열로 만드는 방법이다.
예를 들어, 위와 같은 데이터가 있다고 하자.
이 데이터의 'variable' 열은 2가지 의미를 갖고 있는데, '_' 를 기준으로 왼쪽은 상태를, 오른쪽은 국가를 나타내고 있다.
그래서 'Cases_Guinea'라고 하면 'Cases'와 'Guinea' 이렇게 2개로 나누어 'status', 'country' 라는 열로 만들어주고자 한다.
이는 파이썬의 문자열 처리 메서드인 split와 get을 활용하면 바로 해결된다! 바로 알아보자.
import pandas as pd
ebola_long
오늘 활용할 가상의 데이터셋 'ebola_long' 이다.
여기의 'variable' 변수가 갖고 있는 값을 '_' 문자를 기준으로 분리하자.
→ 이를 위해선 문자열 처리 메서드 split가 필요한데, 문자열로 인식되기 위해선 반드시 str을 붙여야 한다. 이렇게!
#split 메서드로 열 이름을 분리
v_split = ebola_long.variable.str.split('_')
v_split
ebola_long['variable'] 변수의 뒤에 바로 str를 붙여 문자열로 인식한 후, split를 활용해 문자열을 분리했다.
이렇게 만들어진 v_split은 Series 형태인데, 각 값은 list 형태로 들어있다.
print(type(v_split))
print(type(v_split[0]))
예를 들어 v_split[0][0]를 출력하면 'Cases'가 나올 것이고
이렇게 for문을 만들어 하나하나씩 출력하는 것도 방법이지만 꽤 오랜 시간이 걸릴 것이다.
이 때 문자열 처리 메서드인 get을 활용하면 손쉽게 리스트 내 0번째 값과 1번째 값을 모조리 뽑을 수 있다.
#왼쪽꺼 싹뽑기
v_split.str.get(0)
이런 식으로 v_split.str.get(0)는 v_split의 왼쪽 값들 모두,
v_split.str.get(1)은 v_split의 오른쪽 값들을 모두 뽑는다.
이렇게 뽑힌 값도 모두 Series므로 얘네를 데이터프레임에 새로운 열로 추가해보자.
v_statue = v_split.str.get(0)
v_country= v_split.str.get(1)
ebola_long['status'], ebola_long['country'] = (v_statue, v_country)
ebola_long.head()
이렇게 원하는 형태를 도출하였다 :)
[번외편] pd.concat 메서드를 활용해 더 빠르게 구하는 방법
v_split = ebola_long.variable.str.split('_', expand=True)
v_split.head(3)
split 메서드에서 expand = True를 사용하면 데이터프레임 형태로 나오게 된다. (디폴트는 아까 본것처럼 Series이다.)
데이터프레임의 컬럼명을 수정하자.
#위의 v_split이 데이터프레임이므로 컬럼명 바로 수정 가능
v_split.columns = ['status', 'country']
v_split.head(3)
이렇게 만들어진 v_split과,
원래 있었던 ebola_long 데이터셋을 결합시키기만 하면 된다.
column-bind로 붙이고(axis = 1), outer join하기 위해 pandas의 concat을 활용한다.
#곧바로 ebola_long과 v_split을 concat으로 연결
pd.concat([ebola_long, v_split], axis=1)
참고도서: Do it! Pandas 입문
'Skillset > Python, Git' 카테고리의 다른 글
[pandas] 결측치 다루기 - 결측치 확인, 결측치 처리(NaN drop, interpolate) (0) | 2022.06.21 |
---|---|
[pandas] 데이터 연결하기 - pd.concat, pd.merge 차이점 및 사용법 (0) | 2022.06.18 |
[pandas] pd.melt, pd.pivot_table을 활용해 데이터프레임 가공하기 (2) | 2022.06.17 |
[시각화] 파이썬 EDA에 꼭 필요한 시각화 그래프 (3) plt.subplots 사용하기 (0) | 2022.06.16 |
[시각화] 파이썬 EDA에 꼭 필요한 시각화 그래프 (2) 범주형 데이터 (0) | 2022.06.16 |