개발고생일지/파이썬

pandas Dataframe(데이터프레임) 열 제목(columns), index(행) 변경 방법

Fartist 2023. 3. 28. 10:00
- 목차
들어가는 말
1. columns 이름(열 이름) 변경 방법
2. index(행) 변경 방법
3. 특정 행에 있는 데이터 값 변경 방법(행 데이터 값 교체)
갈무리

[그림 1] 데이터프레임 행, 열 이름 변경
[그림 1] 데이터프레임 행, 열 이름 변경


들어가는 말

 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] 연습용 데이터프레임

[그림 2] 연습용 데이터프레임


1.  columns 이름(열 이름) 변경 방법

1) 특정 열의 이름만 바꾸는 경우

#특정 열의 이름만 바꾸는 경우
df_01.rename(columns={'name':'이름'})

[코드 2] 특정 열의 이름만 바꾸는 경우

[그림 3] 바뀐 열 이름 'name' --> '이름'

 [코드 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는 '이곳에서'라는 뜻을 가지고 있습니다. 코드 실행 후 원본 데이터프레임을 열람해 보면 열 이름이 바뀐 것을 확인할 수 있습니다.

[그림 4] 바뀐 원본 데이터프레임
[그림 4] 바뀐 원본 데이터프레임


2) 전체 열의 이름을 바꾸는 경우

#전체 열의 이름을 바꾸고 싶은 경우
#반드시 열의 개수와 리스트에 있는 데이터 값의 개수가 일치해야 합니다.
#유지를 원하는 열 이름은 그대로 기입해 주어야 합니다.

df_01.columns= ['아이디', '이름', '이메일주소']

[코드 4] 전체 열의 이름을 바꾸는 경우

 전체 열의 이름을 바꾸고 싶을 때는 데이터프레임의  columns를 선택한 후 새로운 열 이름 리스트를 할당해주는 것으로 구현할 수 있습니다. [코드 4]에서 데이터프레임.columns로 데이터프레임의 열을 선택합니다. 대괄호[] 안에는 변경하고픈 열 이름을 나열합니다. 여기서 주의할 점은 반드시 열의 개수와 리스트 안의 값의 개수가 같아야 한다는 것입니다. 또한 수정을 원하지 않는 열이 있다면, 그 열 이름의 위치에는 동일한 이름을 입력합니다. 

[그림 5] 열 전체 이름 변경
[그림 5] 열 전체 이름 변경

[그림 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]으로 확인할 수 있습니다.

[그림 6] rename() 과 reindex()의 차이

rename() 메서드는 데이터 값(values)을 보존하고 열 이름을 교체하지만, reindex() 메서드는 열 이름을 교체하면서 데이터프레임이 가진 모든 데이터 값(values)이 결측치(NaN)로 변합니다.


 


2.  index(행) 변경 방법

1) index 전체 변경

#index 변경1
df_01.index= ['a','b','c']

[코드 6] index 전체 변경

[그림 7] index 전체 변경
[그림 7] index 전체 변경

  데이터프레임.index는 데이터프레임의 index를 선택하는 것입니다. .columns와 작동 메커니즘은 같습니다. index를 선택 했다면 리스트의 형태로 새로운  index 값을 지정해 주어야 합니다. 반드시 index의 개수(행의 개수)와 같아야 합니다. [코드 6]의 실행 결과 [그림 7] 처럼 index가 숫자에서 알파벳 문자로 바뀌었습니다. 


2) 특정 열의 데이터 값으로 index 지정하기

#index 변경2
#set_index()
df_04 = df_01.set_index('아이디')

[코드 7] 특정 열의 데이터 값으로 index 지정하기

[그림 8] set_index()
[그림 8] set_index()

 [코드 7]은 set_index()를 활용해 특정 열의 데이터 값으로 index를 지정하는 메서드입니다. 소괄호() 안에 '열 이름'을 입력하여 해당 열의 데이터 값을 index로 바꿉니다. [그림 8]은 그 결과로 바뀐 index를 보여줍니다. 열 이름인 아이디가 다른 열 이름과 달리 한 계단 아래에 출력된 것을 확인할 수 있습니다. '아이디'는 index 이름으로 바뀌었습니다. 


3.  특정 행에 있는 데이터 값 변경 방법(행 데이터 값 교체)

특정 행에 있는 데이터 값(values) 전체 변경

#특정 행에 있는 데이터값 전체 변경
#.loc[특정 행] = [] 리스트로 각 열에 해당하는 데이터 값을 받습니다.

df_01.loc['c']= ['durian', '김광석', 'durian@gaegosaeng.com']

[코드 8] 특정 행에 있는 데이터 값 변경 방법

[그림 9] 특정 행에 있는 데이터 값 변경

 .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] 코드 전체 보기

반응형