※ 이 글을 쓰는 사람은 SW 비전공자입니다.
※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다.
1편 : 2021.03.31 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Series, Dataframe 개념 정리
2편 : 2021.04.01 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : 엑셀 파일(.xlsx) Dataframe으로 만들기
3편 : 2021.04.03 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 내부 데이터 조회 방법
4편 : 2021.04.05 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 추가 방법
5편 : 2021.04.11 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 삭제하기(drop 함수)
6편 : 2021.04.13 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : 원소바꾸기, dropna(), fillna()
7편 : 2021.04.24 - [코딩/Python] - [Python/파이썬] Pandas Dataframe 결합 : Concat
8편 : 2021.04.25 - [코딩/Python] - [Python/파이썬] Pandas Dataframe 결합 : Merge
이번 포스팅에서는 dataframe의 행(Row)와 열(Column)을 추가하는 방법에 대해 정리하였다. 엑셀을 평소에 많이 사용하는 만큼 Pandas는 꼼꼼히 정리해볼 예정이다. 이전에 포스팅했던 Outlook 데이터 취합 자동화는 Pandas에 익숙해지고 시도해볼 예정이다.
1) Dataframe의 행, 열 이름 변경
2) Dataframe 조회 -. 인덱싱 -. 슬라이싱 -. 열 조회 -. 원소 조회
3) 행 열 추가하기
4) 행 삭제하기(drop)
4) 원소값 바꾸기
5) 결측치(NaN) 관련 |
1. 열(Column)을 추가하는 방법
<코드>
import pandas as pd
#dataframe 생성, 이름열을 인덱스로 설정
df = pd.read_excel("df_test.xlsx", engine="openpyxl", index_col="이름")
print(df)
df['과학'] = 80
print(df)
<결과>
#원본 dataframe
국어 영어 수학
이름
YB 100 90 80
SW 70 60 50
EJ 40 30 20
HJ 10 5 1
#과학 컬럼 추가 후 dataframe
국어 영어 수학 과학
이름
YB 100 90 80 80
SW 70 60 50 80
EJ 40 30 20 80
HJ 10 5 1 80
-. 새로운 컬럼을 추가하고 싶다면 위와 같이 df['추가할 컬럼명'] = value 형태로 사용하면 된다.
-. 단, 새롭게 추가 된 컬럼의 값들은 입력한 value로 통일된다.(과학의 경우 80점으로 통일)
2. 행(Row)를 추가하는 방법
1) loc 이용하기
<코드>
import pandas as pd
#dataframe 생성, 이름열을 인덱스로 설정
df = pd.read_excel("df_test.xlsx", engine="openpyxl", index_col="이름")
print(df)
df.loc['SS']=[100,200,300]
df.loc['YB']=[10,10,10]
print(df)
<결과>
#원본
국어 영어 수학
이름
YB 100 90 80
SW 70 60 50
EJ 40 30 20
HJ 10 5 1
#'SS' 추가, 'YB' 바꾸기
국어 영어 수학
이름
YB 10 10 10
SW 70 60 50
EJ 40 30 20
HJ 10 5 1
SS 100 200 300
-. 이전편에서 인덱싱하기 항목에서 loc( ) 를 설명한적이 있는데 새로운 행을 추가하는 방법에서는 사용법이 좀 다른 것 같다.
서로 헷갈리지 말자.
-. 기본 사용법은 아래와 같다
'dataframe이름'.loc['추가할 인덱스명'] = 컬럼에 맞는 값(리스트 형태, 컬럼수가 맞아야 함.)
-. 이미 있는 인덱스일 경우 덮어씌워지게 된다.
2) append( ) 이용하기
<코드>
import pandas as pd
#dataframe 생성, 이름열을 인덱스로 설정
df = pd.read_excel("df_test.xlsx", engine="openpyxl", index_col=0)
print(df)
#새로운 행 추가, append 사용시 반드시 또다른 df로 정의해주어야 함.
new = {'국어':100, '영어':100, '수학':100}
df2 = df.append(new, ignore_index=True)
print(df2)
<결과>
#원본 df
국어 영어 수학
이름
YB 100 90 80
SW 70 60 50
EJ 40 30 20
HJ 10 5 1
# 결과 : df2 ,4번행 추가(100, 100, 100)
국어 영어 수학
0 100 90 80
1 70 60 50
2 40 30 20
3 10 5 1
4 100 100 100
-. append는 df와 딕셔너리 형태를 합칠 수 있다.(새로운 딕셔너리를 추가할 수 있음)
-. 주석에도 달았지만 append 사용시 반드시 또다른 df로 정의해주어야 한다. df.append만 한다고 원본 df가 수정되진 않는다.
(이 것 때문에 계속 원본이 출력되어 한참 고민 함.)
-. append를 사용하려면 반드시 파라미터에 ignore_index=True를 넣어준다. 해당 파라미터를 True로 설정하면 기존 df의 인덱스를 무시한다. 결과에서 보듯이, 이름이 index였는데 df2 결과에서 숫자 인덱스로 변경되었다.(기존 인덱스 무시 됨.)
-. ignore_index = False는 코드 실행시 에러가 발생한다. 무조건 True로 설정해야 하는 파라미터임.
-. df와 df를 합칠려면 3)의 concat( ) 을 활용해야 한다.
3) concat( )
<코드>
import pandas as pd
#dataframe 생성
df = pd.read_excel("df_test.xlsx", engine="openpyxl")
print(df)
#합칠 dataframe 따로 생성
new = {'이름':['몰라'], '국어':[100], '영어':[100], '수학':[100]}
df2 = pd.DataFrame(new)
print(df2)
#concat통해 합치기
df = pd.concat([df, df2])
print(df)
<결과>
#원본 dataframe
이름 국어 영어 수학
0 YB 100 90 80
1 SW 70 60 50
2 EJ 40 30 20
3 HJ 10 5 1
#합칠 dataframe
이름 국어 영어 수학
0 몰라 100 100 100
#contcat 통해 합친 dataframe
이름 국어 영어 수학
0 YB 100 90 80
1 SW 70 60 50
2 EJ 40 30 20
3 HJ 10 5 1
0 몰라 100 100 100
-. concat( )은 df와 df를 합칠 때 쓴다.
. df를 dictionary 형태로 선언할 때 key 값에 중괄호[ ]를 반드시 붙이자.(에러남)
-. concat()과 비슷하게 merge( ) 가 있는데 concat( )과 차이점은 아래와 같다.
concat : 단순히 2개의 df를 합치는 것
merge : 2개의 df를 공통된 항목을 기준으로 합치는 것
-. merge( )와 concat( )은 다른 포스팅에서 정리 할 예정. 추가로 join( ) 도 있다고 한다.
※ Pandas 참고 포스팅 링크
참고링크1 : blog.naver.com/PostView.nhn?blogId=rising_n_falling&logNo=221629326893
참고링크2 : yganalyst.github.io/data_handling/Pd_1/#2-10-%ED%96%89-%EC%97%B4-%EC%B6%94%EA%B0%80
참고링크3 : zephyrus1111.tistory.com/64
'코딩 > 데이터분석' 카테고리의 다른 글
[Python/파이썬] Numpy 기초 1편 : Array 생성 및 인덱싱,슬라이싱 (0) | 2021.06.29 |
---|---|
[Python/파이썬] Pandas 기초 정리 : 원소 바꾸기, dropna(), fillna() (0) | 2021.04.13 |
[Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 삭제하기(drop 함수) (2) | 2021.04.11 |
[Python/파이썬] Pandas 기초 정리 : Dataframe 내부 데이터 조회 방법 (0) | 2021.04.03 |
[Python/파이썬] Pandas 기초 정리 : Series, Dataframe 개념 정리 (2) | 2021.03.31 |