※ 이 글을 쓰는 사람은 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 |