-
Pandas DataFrame_.copy() 카피 메소드, 데이터프레임 중간에 행 추가 삽입▶파공's 취미 생활/▷파이썬 공부 2021. 7. 17. 14:49
안녕하세요
파이어(F.I.R.E.)를 꿈꾸는 공룡
'파공' 입니다.
오늘은 Pandas 판다스 DataFrame 데이터프레임의 .copy() 메소드를 소개해 드리고 이 메서드가 굳이 왜 필요한지 말씀드리겠습니다.
그리고 아래 링크의 글에서 데이터프레임에 행 추가, 삽입 등등 여러 가지 방법을 말씀드렸었는데, 데이터프레임의 중간에 행을 추가 삽입하는 방법은 말씀을 안 드렸었더라구요. 그래서 그것까지 같이 말씀드리려고 합니다!
(아래 링크 글도 꼭 같이 참고해주세요~^^)
Pandas DataFrame 특정 로우(행) 호출, 수정, 추가, 삭제 하는 법
1. 샘플 데이터 프레임 생성하기
우선은 여느 때와 같이, Pandas 라이브러리를 import 하고 샘플로 사용할 간단한 데이터프레임을 생성하겠습니다.
(데이터프레임을 생성하는 자세한 방법은 아래 링크의 그을 참고해주세요^^)
Pandas DataFrame 생성 만들기 (+ Numpy 행렬 이용하는 법)
<코드>
df_1 = pd.DataFrame({'c1':['a','b','c'], 'c2':[1,2,3]})df_1cs <실행화면>
2. DataFrame 데이터프레임 .copy() 메서드가 필요한 이유!!!
- 원본 변수의 데이터프레임을 보존하면서, 그 데이터프레임을 복사하여 다른 작업을 할 때 필요합니다.
- 원본 변수의 데이터프레임을 새로운 변수에 그냥 대입해줘서는 원본 데이터프레임이 보존이 안됩니다.
직접 실습을 해보겠습니다.
2-1. 새로운 변수에 기존의 데이터프레임 그냥 대입
<코드>
df_2 = df_1 # 새로운 변수에 기존의 데이터프레임 대입df_2cs <실행화면>
df_2 변수에 df_1 데이터 프레임이 잘 대입되었죠.
이제 df_2를 좀 바꿔보겠습니다.
<코드>
df_2.loc[1] = ['modi','fy'] #df_1은 그대로 두고, df_2만 바꿔줬음df_2cs <실행화면>
df_2 데이터프레임의 두 번째 행 (인덱스 1 행) 이 바뀐 것을 보실 수 있죠.
그렇다면, df_1을 한 번 확인해볼까요?
df_1은 우리가 바꾼 적이 없지만 df_2처럼 바뀌어 버렸네요....!! 이것이 바로 .copy() 메서드를 사용해야 하는 이유입니다!
그렇다면, 이번엔 .copy() 메서드를 사용해 보겠습니다!
2-2. 새로운 변수에 기존의 데이터프레임을 .copy() 메서드를 사용하여 대입
<코드>
df_3 = df_1.copy() # df_3에 df_1을 카피하여 넣어줍니다.df_3cs <실행화면>
df_1을 새로 정의하지 않고 사용하던거를 그대로 가져왔기 때문에 df_3 데이터프레임이 위 그림과 같은 상태입니다.
이제 df_3을 좀 바꿔보겠습니다!
<코드>
df_3.loc[1] = 'change' #df_3을 바꿔보겠습니다.df_3cs <실행화면>
df_3 데이터프레임의 두 번째 행 (인덱스 1 행) 이 'modi', 'fy' 에서 'change', 'change'로 바뀌었음을 확인할 수 있습니다.
이제 df_1을 확인해 보겠습니다.
아까와는 다르게 이번엔 df_1의 두 번째 행이 'modi', 'fy'로 그대로 있습니다!
이제 왜 .copy() 메서드가 필요하고, 언제 이 메서드를 사용하면 될지 감이 오셨을 거라고 생각합니다. 카피 메서드를 사용하는 이유 다시 한번 말씀드려보고 다음 주제로 넘어가겠습니다.
- 원본 변수의 데이터프레임을 보존하면서, 그 데이터프레임을 복사하여 다른 작업을 할 때 필요합니다.
- 원본 변수의 데이터프레임을 새로운 변수에 그냥 대입해줘서는 원본 데이터프레임이 보존이 안됩니다.
3. DataFrame 데이터프레임 중간에 행 삽입·추가 하기
이번에는 데이터프레임의 중간에 행을 삽입 추가하는 방법을 말씀드려보려고 합니다.
df_1을 다시 정의하면서 시작하겠습니다.
<코드>
df_1 = pd.DataFrame({'c1':['a','b','c'], 'c2':[1,2,3]})df_1cs <실행화면>
이제 우리는 인덱스 1 행과 인덱스 2행 사이에 새로운 행을 추가해보도록 하겠습니다. 추후에 인덱스를 정렬하는 .sort_index() 메서드를 이용할 것이기 때문에, 인덱스를 정렬 했을 때 인덱스 1과 2 사이에 위치 할 수 있도록 인덱스 1.5를 사용하여 행을 우선 추가해보도록 하겠습니다.
<코드>
df_1.loc[1.5] = ['new','row']df_1cs <실행화면>
이제 아까 말씀드렸던 .sort_index() 메서드를 이용해서 인덱스를 기준으로 행들을 정렬해줍니다.
<코드>
#인덱스를 기준으로 정렬해줍니다.df_1 = df_1.sort_index()df_1cs <실행화면>
우리가 추가했던 행이 우리가 원하는 위치로 이동했음을 확인할 수 있습니다.
참고로, 지금 여기서 .sort_index() 메서드는 인덱스 기준 오름차순으로 행들을 정렬해줬는데요. .sort_index()를 이용해서 내림차순으로 행들을 정렬해 줄 수도있습니다. .sort_index() 메서드의 파라미터로 'ascending'이 있습니다. 이 값이 기본적으로 True로 설정되어있기 때문에, 내림차순 정렬을 원하실 때는 .sort_index(ascending=False) 와 같이 파라미터와 값을 추가해주시면 됩니다.
다시 본론으로 돌아와서, 우리가 추가한 행이 원하는 위치에 잘 도착했으나, 인덱스 값들이 정수가 아니라는 점이 좀 신경쓰입니다. 인덱스 값들을 정수로 바꿔주면 더 깔끔해질 것 같으니 인덱스를 수정해 보겠습니다.
(데이터프레임의 인덱스를 수정하는 다양한 방법들은 아래 링크 글 참고해주세요^^)
Pandas DataFrame Index 판다스 데이터프레임 인덱스 수정하는 방법
<코드>
df_1 = df_1.reset_index(drop = True) #인덱스를 아예 초기화 시켜버림df_1cs <실행화면>
이제 데이터프레임의 인덱스가 이쁘게 정수로 리셋 되었네요.
오늘은 Pandas DataFrame (판다스 데이터프레임)을 카피하는 .copy()메서드를 소개해드리고, 이 메서드를 왜 사용해야 하는지, 언제 사용해야하는지 말씀드렸습니다.
그리고나서 추가적으로 데이터프레임의 중간에 행을 추가 삽입하는 방법까지 말씀을 드려봤습니다.
파이썬 특히 판다스를 공부하시는 분들께 조금이나마 도움이 되면 좋겠습니다.^^
오늘도 글 읽어 주셔서 감사합니다!
Look Rich or Be Rich
현명한 선택을 응원합니다.
-파공-
'▶파공's 취미 생활 > ▷파이썬 공부' 카테고리의 다른 글
Pandas 판다스 DataFrame 원하는 데이터 특정 셀 추출, 변경(수정) (0) 2022.08.28 Pandas DataFrame csv파일 엑셀파일 불러오기 읽기, utf-8 에러 해결법 (0) 2021.07.20 Pandas DataFrame Index 판다스 데이터프레임 인덱스 수정 (0) 2021.07.13 파이썬 포맷팅 Format (feat. %, {}, f-string) 알아보기 (0) 2021.03.09 Pandas DataFrame 특정 로우(행) 호출, 수정, 추가, 삭제 하는 법 (4) 2021.01.20