본문 바로가기

코딩/데이터분석

[Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 추가 방법

반응형

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

728x90