본문 바로가기

Programming Language/Data & A.I. (데이터 & 인공지능 관련)

[ 판다스(Pandas) ] 데이터 프레임에 새로운 데이터 추가하기, 로우 인덱스/ 컬럼 인덱스 이름 바꾸기(rename : 리네임)

반응형

 판다스 기존 데이터에 새로운 데이터를 추가하고 싶다면, 기존 컬럼(열) 크기에 맞게 데이터를 입력해준 후 맨 밑 부분을 len(df) 를 이용하여 넣어주는 방식으로 진행됩니다. 또한 rename 속성은 로우 컬럼 인덱스 이름 교체하기 위해서 사용됩니다. 예시로 한번 살펴보겠습니다.

 

Q . '무한도전' 데이터에서
새로운 데이터인 '황광희' 데이터를 추가해주세요


우리가 이 글에서 할 문제입니다.

0. 기존의 무한도전 데이터를 불러오세요

#판다스 불러오기
import pandas as pd

#데이터 불러오기(인덱스 기본 번호 지정 x)
challenge_df = pd.read_csv('무한도전.csv',encoding = 'cp949', index_col = 0)
challenge_df

 저는 기존에 있는 '무한도전' 데이터를 불러왔고, index_col=0으로 지정하여 행 인덱스 이름과 열 인덱스 이름을 제거해주었습니다. 그리고 그 자리에 원래 1행 1열에 있던 값들이 채워지게 되죠! 무한도전 데이터는 index_col=0을 통해서 8행 5열의 짧은 예시 데이터입니다.

 

1.  '황광희' 라는 데이터를 추가해보세요

#황광희 데이터프레임을 저장해줍니다.
kwanghee_df = [1988, '4개', 'Yes', 175, '종이인형'] 
# 기존의 열(컬럼)의 갯수에 따라서 데이터의 길이도 맞게 준비해줍니다.

새로운 데이터에 '황광희' 이름이 빠진 이유

 우리는 위에서 데이터를 준비해줄 때  index_col=0 으로 지정해주어 멤버들 이름이 들어가있는 1열 데이터를 로우 인덱스의 이름(name) 값으로 정해주었습니다. 여기서 포인트는 ! 기존 데이터프레임의 열의 길이에 맞춰서 새로운 데이터도 열(칼럼)의 길이를 미리 정해주어야한다는 점 입니다. 즉, 기존 데이터프레임 길이에 맞추기 위해 광희 데이터에서 '황광희' 값은 일단은 빼고 데이터를 추가한 뒤 가장 나중에 rename을 통해서 이름을 수정하는 방식으로 진행했습니다.

 

만약 '광희' 이름까지 추가하여 작성하게 된다면?

 만약 이 황광희 데이터를 기존 데이터의 길이에 맞게 제대로 준비해주시지 않았다면,

ValueError: cannot set a row with mismatched columns

에러 코드가 이렇게 뜨게 됩니다. 요약하자면 로우 / 컬럼의 길이가 원래의 것과 맞지 않다는 뜻이라서, 열 하나만 더 생성하게 되어도 이러한 코드가 발생하게 됩니다. 

 

 

2.  kwanghee_df('황광희'데이터)를 기존 데이터를 삽입하기

#컬럼 길이를 맞추기 위해 '황광희'라는 이름을 뺀 상태입니다.
challenge_df.loc[len(challenge_df)] = kwanghee_df
challenge_df

len(df)를 써주는 이유 !

 황광희라는 데이터를 이번엔 기존 데이터에 넣어줄 땐 제일 하단에 넣게 되는데요, 우리 데이터처럼 행이 8개인 데이터일때는 직접 작성하면 되지만, 정말 많은 데이터를 보유한 값의 경우 데이터의 길이를 파악 하기가 힘듭니다. 그렇기 때문에 어떤 데이터 프레임이 와도 적용 가능한 len(df) 를 이용하여 원래 길이 자리에 loc를 지정해주어 데이터를 받아드릴 준비를 하고, kwanghee_df를 그 자리에 넣어주시면 컬럼 길이가 완성됩니다.

 

 

3.  인덱스 네임을 rename 을 통해서 다시 지정해주기.

#rename(index={바꾸기 전 값: 바뀌는 값}, columns={바꾸기 전 값: 바뀌는 값}, inplace=True)
challenge_df.rename(index={8: '황광희'},
                    columns={'별명': '애칭'},
                    inplace=True)
challenge_df

아까 1번에서 말씀드렸던 '황광희' 이름 수정해주기

위에서 말씀드렸듯이 원래 데이터의 길이에 맞추기 위해 우선적으로 지정해주었고, 그 이후 데이터들은 잘 삽입되었지만 로우 인덱스 이름이 '8'로 지정되어있는 것을 볼 수 있었습니다. 그렇기에 '황광희' 라는 이름으로 그 값을 바꿔주는 작업이 필요했습니다. 이럴 때 필요한 메소드가 rename 메소드 였습니다. 

df.rename(index={바꾸기 전 값: 바뀌는 값}, columns={바꾸기 전 값: 바뀌는 값}, inplace=True)

 보시면 아시겠지만, 바꾸기 전 값인 8을 집어넣고, 바꾸고싶은 값인 '황광희' 값을 집어넣으면 끝입니다. 그냥 인덱스 '만' 넣어서 진행해도 되지만 혹시나 칼럼도 바꾸고 싶으시다면 columns 도 똑같이 진행해주시면 됩니다. inplace=True의 경우 바뀐 것을 그대로 적용할 건지! 아니면 그냥 일시적으로 바뀐 것을 보기 위해서 에 따라 다르게 적용됩니다. 

inplace=True의 경우 바뀐 것을 유지하기 위해서, 기존 데이터프레임까지 변형할 때 사용하는 코드입니다.

 

 저의 아주 작은 티끌 코딩 글이 블로그 방문자 님의 작업에 도움이 됐으면 좋겠습니다. 

 좋아요(❤) 버튼 ↙은 항상 감사합니다. 

 방문하신 모든 분들 좋은 하루 되세요 : ) 

반응형