파이썬 데이터프레임 split - paisseon deiteopeuleim split

오늘은 python에서 문자열 데이터를 처리할 때의 꿀팁 중 하나인, 열 이름을 관리하는 방법에 대해 포스팅한다.

이 방법은 하나의 열에 여러 의미가 있는 경우, 이 열의 정보를 분리하여 새로운 N개 열로 만드는 방법이다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

예를 들어, 위와 같은 데이터가 있다고 하자.

이 데이터의 'variable' 열은 2가지 의미를 갖고 있는데, '_' 를 기준으로 왼쪽은 상태를, 오른쪽은 국가를 나타내고 있다.

그래서 'Cases_Guinea'라고 하면 'Cases'와 'Guinea' 이렇게 2개로 나누어 'status', 'country' 라는 열로 만들어주고자 한다.

이는 파이썬의 문자열 처리 메서드인 split와 get을 활용하면 바로 해결된다! 바로 알아보자.

import pandas as pd
ebola_long
파이썬 데이터프레임 split - paisseon deiteopeuleim split

오늘 활용할 가상의 데이터셋 'ebola_long' 이다. 

여기의 'variable' 변수가 갖고 있는 값을 '_' 문자를 기준으로 분리하자. 

→ 이를 위해선 문자열 처리 메서드 split가 필요한데, 문자열로 인식되기 위해선 반드시 str을 붙여야 한다. 이렇게!

#split 메서드로 열 이름을 분리
v_split = ebola_long.variable.str.split('_')
v_split
파이썬 데이터프레임 split - paisseon deiteopeuleim split

ebola_long['variable'] 변수의 뒤에 바로 str를 붙여 문자열로 인식한 후, split를 활용해 문자열을 분리했다.

이렇게 만들어진 v_split은 Series 형태인데, 각 값은 list 형태로 들어있다.

print(type(v_split))
print(type(v_split[0]))
파이썬 데이터프레임 split - paisseon deiteopeuleim split

예를 들어 v_split[0][0]를 출력하면 'Cases'가 나올 것이고

이렇게 for문을 만들어 하나하나씩 출력하는 것도 방법이지만 꽤 오랜 시간이 걸릴 것이다.

이 때 문자열 처리 메서드인 get을 활용하면 손쉽게 리스트 내 0번째 값과 1번째 값을 모조리 뽑을 수 있다.

#왼쪽꺼 싹뽑기
v_split.str.get(0)
파이썬 데이터프레임 split - paisseon deiteopeuleim split

이런 식으로 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()
파이썬 데이터프레임 split - paisseon deiteopeuleim split

이렇게 원하는 형태를 도출하였다 :) 

[번외편] pd.concat 메서드를 활용해 더 빠르게 구하는 방법

v_split = ebola_long.variable.str.split('_', expand=True) 
v_split.head(3)
파이썬 데이터프레임 split - paisseon deiteopeuleim split

split 메서드에서 expand = True를 사용하면 데이터프레임 형태로 나오게 된다. (디폴트는 아까 본것처럼 Series이다.)

데이터프레임의 컬럼명을 수정하자.

#위의 v_split이 데이터프레임이므로 컬럼명 바로 수정 가능
v_split.columns = ['status', 'country']
v_split.head(3)
파이썬 데이터프레임 split - paisseon deiteopeuleim split

이렇게 만들어진 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)
파이썬 데이터프레임 split - paisseon deiteopeuleim split
참고도서: Do it! Pandas 입문 

데이터 불러오기

파이썬 데이터프레임 split - paisseon deiteopeuleim split

연월일 컬럼을 연 / 월 / 일 세개의 컬럼으로 나눠서 보고 싶다면

방법1 : str.split()

파이썬 데이터프레임 split - paisseon deiteopeuleim split

1. 연월일 컬럼의 자료형을 object로 변환한다.

2. 판다스의 자료형과 파이썬의 문자열을 이용해 .str.split('-') 문법을 사용한다.

3. 그렇게 분할된 리스트를 시리즈로 받아낸다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

4. 그 시리즈를 .str.get()을 이용한다.

5. 0번째는 연 / 1번째는 월 / 2번째는 일 

6. 이들을 새 컬럼으로 추가한다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

* 주의 : 연월일, 연, 월, 일 컬럼은 object형이므로

추후 활용을 위해선 정수형으로 바꿀 필요가 있다.

방법2 : str.split(expand=True)

- 사실 방법1과 유사하나 코드가 다소 간결해지는 것 뿐이다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

1. split에서 expand=True를 넣으면 바로 데이터프레임의 컬럼으로 생성이 된다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

2. 새로 생성된 데이터프레임에 컬럼명을 넣어준다.

파이썬 데이터프레임 split - paisseon deiteopeuleim split

3. pd.concat을 이용해 연결해준다.