오늘은 python에서 문자열 데이터를 처리할 때의 꿀팁 중 하나인, 열 이름을 관리하는 방법에 대해 포스팅한다. 이 방법은 하나의 열에 여러 의미가 있는 경우, 이 열의 정보를 분리하여 새로운 N개 열로 만드는 방법이다. 예를 들어, 위와 같은 데이터가 있다고 하자. 이 데이터의 'variable' 열은 2가지 의미를 갖고 있는데, '_' 를 기준으로 왼쪽은 상태를, 오른쪽은 국가를 나타내고 있다. 그래서 'Cases_Guinea'라고 하면 'Cases'와 'Guinea' 이렇게 2개로 나누어 'status', 'country' 라는 열로 만들어주고자 한다. 이는 파이썬의 문자열 처리 메서드인 split와 get을 활용하면 바로 해결된다! 바로 알아보자.
오늘 활용할 가상의 데이터셋 'ebola_long' 이다. 여기의 'variable' 변수가 갖고 있는 값을 '_' 문자를 기준으로 분리하자. → 이를 위해선 문자열 처리 메서드 split가 필요한데, 문자열로 인식되기 위해선 반드시 str을 붙여야 한다. 이렇게!
ebola_long['variable'] 변수의 뒤에 바로 str를 붙여 문자열로 인식한 후, split를 활용해 문자열을 분리했다. 이렇게 만들어진 v_split은 Series 형태인데, 각 값은 list 형태로 들어있다.
예를 들어 v_split[0][0]를 출력하면 'Cases'가 나올 것이고 이렇게 for문을 만들어 하나하나씩 출력하는 것도 방법이지만 꽤 오랜 시간이 걸릴 것이다. 이 때 문자열 처리 메서드인 get을 활용하면 손쉽게 리스트 내 0번째 값과 1번째 값을 모조리 뽑을 수 있다.
이런 식으로 v_split.str.get(0)는 v_split의 왼쪽 값들 모두, v_split.str.get(1)은 v_split의 오른쪽 값들을 모두 뽑는다. 이렇게 뽑힌 값도 모두 Series므로 얘네를 데이터프레임에 새로운 열로 추가해보자.
이렇게 원하는 형태를 도출하였다 :) [번외편] pd.concat 메서드를 활용해 더 빠르게 구하는 방법
split 메서드에서 expand = True를 사용하면 데이터프레임 형태로 나오게 된다. (디폴트는 아까 본것처럼 Series이다.) 데이터프레임의 컬럼명을 수정하자.
이렇게 만들어진 v_split과, 원래 있었던 ebola_long 데이터셋을 결합시키기만 하면 된다. column-bind로 붙이고(axis = 1), outer join하기 위해 pandas의 concat을 활용한다.
참고도서: Do it! Pandas 입문 데이터 불러오기연월일 컬럼을 연 / 월 / 일 세개의 컬럼으로 나눠서 보고 싶다면 방법1 : str.split()1. 연월일 컬럼의 자료형을 object로 변환한다. 2. 판다스의 자료형과 파이썬의 문자열을 이용해 .str.split('-') 문법을 사용한다. 3. 그렇게 분할된 리스트를 시리즈로 받아낸다. 4. 그 시리즈를 .str.get()을 이용한다. 5. 0번째는 연 / 1번째는 월 / 2번째는 일 6. 이들을 새 컬럼으로 추가한다. * 주의 : 연월일, 연, 월, 일 컬럼은 object형이므로 추후 활용을 위해선 정수형으로 바꿀 필요가 있다. 방법2 : str.split(expand=True)- 사실 방법1과 유사하나 코드가 다소 간결해지는 것 뿐이다. 1. split에서 expand=True를 넣으면 바로 데이터프레임의 컬럼으로 생성이 된다. 2. 새로 생성된 데이터프레임에 컬럼명을 넣어준다. 3. pd.concat을 이용해 연결해준다. |