데이터를 처리하다 보면 때때로 컬럼을 추가, 수정, 삭제해야 하는 경우가 있습니다. 예를 들어 기존의 데이터를 조합하여 새로운 컬럼을 만들고 싶을 수 있습니다. 또는 특정 값을 바꾸고 싶을 수도 있습니다. 이번 시간에는 컬럼을 추가, 수정하는 방법을 알아보겠습니다.
샘플 데이터 불러오기
# 판다스 라이브러리 임포트
import pandas as pd
# plotly express에 내장되어있는 gapminder 데이터프레임을 사용하겠습니다.
import plotly.express as px
# plotly가 설치되어있지 않다면 아래 명령으로 설치할 수 있습니다.
# !pip install plotly
df = px.data.gapminder()
데이터 살펴보기
df.head()
컬럼 추가하기
만약 새로 추가하는 컬럼의 값이 모두 동일하다면 아래와 같이 간단히 해결할 수 있습니다.
# 컬럼에 집어넣는 모든 값이 동일하다면
# 변수 할당과 마찬가지로 =를 사용하면 됩니다.
df['source'] = 'gapminder/Sweden'
df.head()
하지만 이런 경우는 흔치 않습니다. 대부분의 경우 기존 컬럼을 이용하여 새로운 컬럼을 만들게 됩니다.
# gdpPercap 컬럼과 pop 컬럼을 곱하여 산출한 값을
# 새로운 컬럼 real_gdp에 할당합니다.
df['real_gdp'] = df['gdpPercap'] * df['pop']
# 결과를 출력합니다
df.head()
컬럼 수정하기
어떤 컬럼은 여러 가지 의미를 가지고 있기도 합니다. 예를 들어 source 컬럼의 데이터는 '기관의 이름'과 '기관이 위치한 나라의 이름'을 합쳐 만든 데이터입니다. 이렇게 여러 가지 의미를 담고 있는 데이터는 그 의미 단위로 분리할 수 있습니다.
이때 데이터를 분리하는 좋은 방법은 .str.split() 함수를 사용하는 것입니다. 자세한 내용은 아래 예제를 보면서 알아보겠습니다.
# .str.split() 함수를 사용해서 /를 기준으로 데이터를 분리합니다.
# 별도의 기준를 집어넣지 않는다면 기본적으로 공백을 기준으로 분리합니다.
# 그 결과를 새로운 변수 var_split에 할당합니다.
var_split = df['source'].str.split("/")
# 결과를 출력합니다.
# 변수 var_split은 시리즈입니다.
print(type(var_split))
print()
# 각각의 데이터는 리스트입니다.
print(type(var_split[0]))
print()
# 상위 5행을 출력합니다.
var_split.head()
앞의 과정을 통해 문자열이 분리된 것을 확인했습니다. 이제 분리된 문자열을 데이터프레임의 새로운 컬럼으로 추가하겠습니다.
# .str 접근자(accessor)를 사용하면
# 리스트의 인덱싱과 같은 방식으로 데이터를 추출할 수 있습니다.
# [gapminder, Sweden] 리스트에서 첫번째 요소를 가져옵니다.
value_name = var_split.str[0]
# 결과를 출력합니다
print(value_name.head())
print()
# .str 접근자(accessor)를 사용하면
# 리스트의 인덱싱과 같은 방식으로 데이터를 추출할 수 있습니다.
# [gapminder, Sweden] 리스트에서 두번째 요소를 가져옵니다.
value_country = var_split.str[1]
# 결과를 출력합니다
print(value_country.head())
# 인덱싱 결과를 새로운 변수 foundation_name에 할당합니다.
df['foundation_name'] = value_name
# 인덱싱 결과를 새로운 변수 foundation_name에 할당합니다.
df['foundation_location'] = value_country
# 결과를 출력합니다.
df.head()
이외에 컬럼의 값을 수정하는데 자주 쓰이는 함수로는 .str.replace()이 있습니다. .str.replace()
함수는 엑셀의 "찾기 및 바꾸기" 기능과 유사한 역할하며, .str.replace('찾을 내용`, `바꿀 내용`)
과 같은 형태로 사용됩니다.
자세한 내용은 아래 예제를 보면서 알아보겠습니다.
# .str.replace()를 사용해 / 기호를 - 기호로 바꿨습니다.
# 결과의 상위 5행만 출력합니다.
df['source'].str.replace('/', '-').head()
컬럼 삭제하기
.drop() 메소드를 사용하여 삭제할 수 있습니다. 개인적으로는 컬럼을 삭제하기보다는 필요한 컬럼만 선택해서 새로운 데이터프레임을 만드는 것이 더 낫다고 생각합니다.
-이 글은 아나콘다(Anaconda3)가 설치된 환경을 기준으로 작성되었습니다.