- 목차
들어가는 말
1. columns 이름(열 이름) 변경 방법
2. index(행) 변경 방법
3. 특정 행에 있는 데이터 값 변경 방법(행 데이터 값 교체)
갈무리
들어가는 말
pandas Dataframe을 사용하다 보면 열이나 행의 이름을 변경해야 할 때가 있습니다. 이번 글에서는 열과 행 이름의 변경에 대해서 알아보겠습니다. 열 이름을 교체하는 것으로는 .rename() 또는 reindex가 사용될 수 있습니다. 또는 .columns=[]로 리스트의 형태로 새로운 열로 전체를 교체해 줄 수 있습니다. index를 교체할 때는 .index=[]의 형태로 전체 index를 교체하거나 .set_index('열 이름')으로 데이터프레임이 가진 열 중에서 하나를 골라, 해당 열이 가진 데이터 값을 index로 지정할 수 있습니다. 이것과 별개로 특정 행의 데이터 값(values)을 교체하기 위해서는 .loc[index값]=[]을 통해서 한 행의 데이터를 모두 교체할 수 있습니다. 자세한 방법은 본문에서 살펴보도록 하겠습니다.
#연습용 데이터프레임
import pandas as pd
name = ['홍길동', '김철수', '나일류']
ID = ['apple', 'banaba', 'coconut']
mail = ['apple@gaegosaeng.com', 'banana@gaegosaeng.com', 'coconut@gaegosaeng.com']
df_01 = pd.DataFrame({'ID': ID, 'name': name, 'E-mail': mail})
[코드 1] 연습용 데이터프레임
1. columns 이름(열 이름) 변경 방법
1) 특정 열의 이름만 바꾸는 경우
#특정 열의 이름만 바꾸는 경우
df_01.rename(columns={'name':'이름'})
[코드 2] 특정 열의 이름만 바꾸는 경우
[코드 2]를 보면 .rename() 메서드를 사용해 열 이름을 교체하고 있습니다. 소괄호() 안에는 columns=가 딕셔너리를 값으로 갖는 것을 알 수 있습니다. key 값으로는 기존의 열 이름이 들어가고, value 값으로 바뀔 열 이름이 들어갑니다. 코드의 실행 결과로 [그림 3]에서 'name'열이 '이름'열로 바뀐 것을 확인할 수 있습니다.
데이터프레임 df_01을 다시 열람해 보면 이상한 점을 발견하실 겁니다. 분명 방금 열 이름을 변경했는데, 다시 원래 열 이름으로 출력됩니다. .rename() 메서드는 원본 데이터프레임을 변형시키지 않습니다. 보통은 다른 데이터프레임에 할당하는 방식으로 변형된 데이터프레임을 저장합니다. 만약 원본 데이터프레임을 변경하고 싶다면 [코드 3]을 참고해야 합니다.
#원본 데이터프레임을 수정하기 위해 inplace=True 인자를 넣어줍니다.
df_01.rename(columns={'name':'이름'}, inplace=True)
[코드 3] 원본 데이터프레임을 바꾸기 위해 inplace=True 인자를 넣어줍니다.
[코드 3]에서는 원본 데이터프레임을 수정하기 위해 inplace=인자에 True를 할당하였습니다. inplace는 '이곳에서'라는 뜻을 가지고 있습니다. 코드 실행 후 원본 데이터프레임을 열람해 보면 열 이름이 바뀐 것을 확인할 수 있습니다.
2) 전체 열의 이름을 바꾸는 경우
#전체 열의 이름을 바꾸고 싶은 경우
#반드시 열의 개수와 리스트에 있는 데이터 값의 개수가 일치해야 합니다.
#유지를 원하는 열 이름은 그대로 기입해 주어야 합니다.
df_01.columns= ['아이디', '이름', '이메일주소']
[코드 4] 전체 열의 이름을 바꾸는 경우
전체 열의 이름을 바꾸고 싶을 때는 데이터프레임의 columns를 선택한 후 새로운 열 이름 리스트를 할당해주는 것으로 구현할 수 있습니다. [코드 4]에서 데이터프레임.columns로 데이터프레임의 열을 선택합니다. 대괄호[] 안에는 변경하고픈 열 이름을 나열합니다. 여기서 주의할 점은 반드시 열의 개수와 리스트 안의 값의 개수가 같아야 한다는 것입니다. 또한 수정을 원하지 않는 열이 있다면, 그 열 이름의 위치에는 동일한 이름을 입력합니다.
[그림 5]는 [코드 4]의 실행 결과입니다. '이름' 열을 제외한 나머지 열의 이름을 변경하였고 제대로 반영되었습니다.
3) .reindex()로 열 이름 변경하기
#reindex()로 열 이름 변경하기
#데이터 값(value)은 보존되지 않습니다.
df_02 = df_01.reindex(columns = ['A', 'B', 'C'])
[코드 5] reindex() 메서드로 열 이름 변경하기
.reindex() 메서드는 .rename() 메서드처럼 소괄호() 안에 columns= 인자를 받아 작동하지만, 크게 두 가지의 차이점을 가진 열 이름 교체 메서드입니다.
rename() | reindex() | |
columns= | dict(딕셔너리) | list(리스트) |
데이터프레임 데이터 값(values) | 보존 | 유실 |
[표 1] rename()과 reindex()의 차이
[표 1]에서 언급한 차이는 [그림 6]으로 확인할 수 있습니다.
rename() 메서드는 데이터 값(values)을 보존하고 열 이름을 교체하지만, reindex() 메서드는 열 이름을 교체하면서 데이터프레임이 가진 모든 데이터 값(values)이 결측치(NaN)로 변합니다.
2. index(행) 변경 방법
1) index 전체 변경
#index 변경1
df_01.index= ['a','b','c']
[코드 6] index 전체 변경
데이터프레임.index는 데이터프레임의 index를 선택하는 것입니다. .columns와 작동 메커니즘은 같습니다. index를 선택 했다면 리스트의 형태로 새로운 index 값을 지정해 주어야 합니다. 반드시 index의 개수(행의 개수)와 같아야 합니다. [코드 6]의 실행 결과 [그림 7] 처럼 index가 숫자에서 알파벳 문자로 바뀌었습니다.
2) 특정 열의 데이터 값으로 index 지정하기
#index 변경2
#set_index()
df_04 = df_01.set_index('아이디')
[코드 7] 특정 열의 데이터 값으로 index 지정하기
[코드 7]은 set_index()를 활용해 특정 열의 데이터 값으로 index를 지정하는 메서드입니다. 소괄호() 안에 '열 이름'을 입력하여 해당 열의 데이터 값을 index로 바꿉니다. [그림 8]은 그 결과로 바뀐 index를 보여줍니다. 열 이름인 아이디가 다른 열 이름과 달리 한 계단 아래에 출력된 것을 확인할 수 있습니다. '아이디'는 index 이름으로 바뀌었습니다.
3. 특정 행에 있는 데이터 값 변경 방법(행 데이터 값 교체)
특정 행에 있는 데이터 값(values) 전체 변경
#특정 행에 있는 데이터값 전체 변경
#.loc[특정 행] = [] 리스트로 각 열에 해당하는 데이터 값을 받습니다.
df_01.loc['c']= ['durian', '김광석', 'durian@gaegosaeng.com']
[코드 8] 특정 행에 있는 데이터 값 변경 방법
.loc[]는 '행 추가' 게시물에서 한 번 다루었던 내용이지만, 이번 '행, 열 변경'을 다루면서 다시 한번 다루겠습니다. 대괄호[] 안에는 입력하고 싶은 index 주소를 기입합니다. [코드 8] 에서는 c행의 데이터를 교체하고자 합니다. 각 열에 들어가는 데이터 값은 리스트 타입으로 묶어줍니다. 그 결과 [그림9] 처럼 c행의 데이터 값이 교체되었습니다.
갈무리
- 코드 전체보기
#연습용 데이터프레임
import pandas as pd
name = ['홍길동', '김철수', '나일류']
ID = ['apple', 'banaba', 'coconut']
mail = ['apple@gaegosaeng.com', 'banana@gaegosaeng.com', 'coconut@gaegosaeng.com']
df_01 = pd.DataFrame({'ID': ID, 'name': name, 'E-mail': mail})
----------------------------------------
#특정 열의 이름만 바꾸는 경우
df_01.rename(columns={'name':'이름'})
#원본 데이터프레임을 수정하기 위해 inplace=True 인자를 넣어줍니다.
df_01.rename(columns={'name':'이름'}, inplace=True)
#전체 열의 이름을 바꾸고 싶은 경우
#반드시 열의 개수와 리스트에 있는 데이터 값의 개수가 일치해야 합니다.
#유지를 원하는 열 이름은 그대로 기입해 주어야 합니다.
df_01.columns= ['아이디', '이름', '이메일주소']
#reindex()로 열 이름 변경하기
#데이터 값은 보존되지 않습니다.
df_02 = df_01.reindex(columns = ['A', 'B', 'C'])
----------------------------------------
#index 변경1
df_01.index= ['a','b','c']
#index 변경2
#set_index()
df_04 = df_01.set_index('아이디')
----------------------------------------
#특정 행에 있는 데이터값 전체 변경
#.loc[특정 행] = [] 리스트로 각 열에 해당하는 데이터 값을 받습니다.
df_01.loc['c']= ['durian', '김광석', 'durian@gaegosaeng.com']
[코드 9] 코드 전체 보기
'개발고생일지 > 파이썬' 카테고리의 다른 글
pandas Dataframe 데이터프레임 정보 조회 방법들 (0) | 2023.03.27 |
---|---|
pandas Dataframe 데이터 값 정렬 .sort_index(), .sort_values() (0) | 2023.03.27 |
pandas Dataframe(데이터프레임) 행, 열 데이터 삭제 (0) | 2023.03.26 |
pandas Dataframe(데이터프레임) 행, 열 합치기 (병합) (0) | 2023.03.26 |
pandas dataframe(데이터프레임) index(행) 추가 (0) | 2023.03.25 |