이 글은 pandas 라이브러리의 replace
함수를 이용해 데이터프레임의 값을 변경하는 방법에 대해 정리한 글이다.
Sample Data
샘플 데이터에 대해 소개하면, 해당 데이터는 아래 코드를 통해 임의로 생성한 데이터이다.
import pandas as pd
import numpy as np
import random
# 문항 개수
num_questions = 10
# 응답자 수
num_respondents = 100
# 응답 범주
responses = ['매우 그렇다', '그렇다', '약간 그렇다', '그렇지 않다', '전혀 그렇지 않다']
# 무작위 응답 생성
np.random.seed(0)
survey_data = np.random.choice(responses, size=(num_respondents, num_questions))
# 데이터프레임 생성
columns = [f'Question {i+1}' for i in range(num_questions)]
df = pd.DataFrame(survey_data, columns=columns)
# 데이터프레임 저장
df.to_csv('./sample_data/survey_sample_data.csv', encoding='cp949')
임의의 100명에게 10개의 질문에 대해 답변을 받았으며, 각 질문은 '전혀 그렇지 않다'부터 '매우 그렇다'까지 5단계 중 하나의 답변이 응답되어 있다고 가정하고 데이터를 생성하였다. 해당 데이터는 아래와 같이 구성되어 있다.
특정 값 변경
replace
함수의 가장 기본적인 사용 방법이자, 특정한 값을 변경하는 방법이다. 가장 기본적인 사용법이라고 할 수 있다. replace
함수는 완벽히 일치하는 값을 찾아 원하는 값으로 변경하는 기능을 수행한다.
df.replace('현재 값','대체 값')
샘플 데이터에서 '전혀 그렇지 않다'라는 값을 1로 바꾸고 싶으면 아래와 같이 사용할 수 있다. '전혀 그렇지 않다'에 해당하는 값이 모두 1로 바뀐 것을 확인할 수 있다.
import pandas as pd
sample_data = pd.read_csv('./sample_data/survey_sample_data.csv', encoding='cp949')
sample_data.replace('전혀 그렇지 않다', 1)
여러 값을 동시에 변경
replace
함수를 활용해서 여러 값을 동시에 변경할 수 있다. 방법은 크게 딕셔너리를 이용하는 방법과 리스트를 이용하는 방법으로 나뉜다. 데이터에 맞춰서 편하게 사용할 수 있는 방법을 활용하면 된다.
딕셔너리 이용
먼저 파이썬의 딕셔너리를 이용한 방법이다. 딕셔너리는 key-value의 쌍으로 이루어져 있으므로, key
에는 현재 값을, value
에는 대체 값을 넣어 쌍으로 만들어주면 된다. (딕셔너리는 중괄호({}
)로 묶여 있으며, key-value 쌍은 콤마(,
)를 통해 구분한다는 점을 잊지말자)
df.replace({'현재_값1':'대체_값1', '현재_값2':'대체_값2'})
'매우 그렇다'를 5로, '그렇다'를 4로 변경하려면 아래와 같이 코드를 입력하면 바꿀 수 있다.
import pandas as pd
sample_data = pd.read_csv('./sample_data/survey_sample_data.csv', encoding='cp949')
sample_data.replace({'매우 그렇다':5, '그렇다':4})
리스트 이용
다음은 리스트를 이용하는 방법이다. 리스트를 이용하여 바꾸기 위해서는 현재 값이 들어 있는 리스트와 대체 값이 들어있는 리스트가 있어야 한다. 이 두 리스트의 개수는 항상 같아야 한다. (개수가 다르면 오류 발생)
df.replace(['현재값1', '현재값2', '현재값3'], ['대체값1', '대체값2', '대체값3'])
만약 현재 값이 저장되어 있는 리스트와 대체 값이 저장되어 있는 리스트가 별도로 있다면 아래와 같이 코드를 사용할 수도 있다.
list1 = ['현재값1', '현재값2', '현재값3']
list2 = ['대체값1', '대체값2', '대체값3']
df.replace(list1, list2)
리스트를 이용하여 '매우 그렇다'를 5로, '그렇다'를 4로 변경하려면 아래와 같이 코드를 작성할 수 있다. opt
는 현재 값이 저장되어 있는 리스트이며, idx
는 대체 값이 저장되어 있는 리스트이다.
import pandas as pd
sample_data = pd.read_csv('./sample_data/survey_sample_data.csv', encoding='cp949')
opt = ['매우 그렇다', '그렇다']
idx = [5, 4]
sample_data.replace(opt, idx)
요약
replace
함수를 사용하여 데이터프레임의 값을 변경할 수 있다.- 특정 하나의 값을 사용할 때에는
df.replace('현재 값','대체 값')
과 같이 코드를 작성할 수 있다. - 여러 값을 한번에 변경할 때에는 딕셔너리 혹은 리스트를 이용하여 코드를 작성할 수 있다.
- 딕셔너리 이용 :
df.replace({'현재_값1':'대체_값1', '현재_값2':'대체_값2'})
- 리스트 이용 :
df.replace(['현재값1', '현재값2', '현재값3'], ['대체값1', '대체값2', '대체값3'])
- 딕셔너리 이용 :
'Data Science > pandas' 카테고리의 다른 글
파이썬 | pandas | 데이터프레임의 전체 열(Column) 이름 가져오기 (1) | 2024.04.16 |
---|---|
파이썬 | pandas | 데이터프레임을 엑셀 파일로 저장하기 (with. csv & xlsx) (0) | 2024.04.04 |
파이썬 | pandas | 한글이 있는 csv 파일 불러올 때 발생하는 UnicodeDecodeError 해결 (0) | 2024.03.24 |
파이썬 | pandas | 데이터 중 필요한 열(Column)만 추출하기 (0) | 2024.03.18 |
파이썬 | pandas | csv, 텍스트(txt), 엑셀(xlsx) 데이터 불러오기 (0) | 2024.03.16 |