개발고생일지/파이썬

pandas dataframe(데이터프레임) columns(열) 추가

Fartist 2023. 3. 25. 10:00
- 목차
들어가는 말
1. 할당 연산자를 사용해, 빈 문자열 / None으로 열 추가하기
2. .assign() 메서드로 열 추가하기
3. .reindex() 메서드로 열 추가하기
4. .insert() 메서드로 원하는 위치에 열 추가하기
5. .apply() 메서드로 열 추가하기
갈무리

[그림 1] 데이터프레임 열 추가
[그림 1] 데이터프레임 열 추가


들어가는 말

 이전에 데이터프레임을 만드는 방법을 알아본 것에 이어서 이번에는 이미 만들어진 데이터프레임에 열을 새롭게 추가하는 방법에 대해서 알아보고자 합니다. 이전의 데이터프레임을 만드는 방법은 '이전 글 링크'를 확인해 보시기 바랍니다.

2023.03.24 - [개발고생일지/파이썬] - pandas Dataframe(데이터프레임) 만드는 방법 총정리

 열을 추가하는 방법은 다양합니다. 기존의 데이터프레임이 가지고 있는 값들 바로 뒤에 이어서 붙일 수도 있고 특정 위치에 지정해서 새롭게 행이나 열을 집어 넣을 수 있습니다. 이번 글을 통해서 데이터프레임 열 추가에 관해서 필요한 기술을 찾아가실 수 있기를 기원합니다.

 우선 열을 추가하는 방법에 대해서 알아보기에 앞서, 빈 데이터프레임과 임의의 행과 열을 가지고 있는 데이터프레임을 만들어보겠습니다.

import pandas as pd

empty_df_01 = pd.DataFrame()

empty_df_01.info
#<bound method DataFrame.info of Empty DataFrame
#Columns: []
#Index: []>

[코드 1] 빈 데이터프레임

user_id = ['apple', 'banana', 'coconut']
user_name = ['홍길동', '김철수', '이미숙']
user_email_addr = ['apple@gaegosaeng.com', 'banana@gaegosaeng.com','coconut@gaegosaeng.com']

empty_df_02 = pd.DataFrame({'ID': user_id, '이름': user_name, 'E-mail': user_email_addr}, index=['0','1','2'])

empty_df_02

[코드 2] 열과 행이 있는 데이터 프레임

[그림 2] 행&#44; 열이 있는 빈 데이터프레임
[그림 2] 행, 열이 있는 빈 데이터프레임


 

1. 할당 연산자를 사용해, 빈 문자열로 열 추가하기

empty_df_01['col_01'] = ''

empty_df_01.info
#<bound method DataFrame.info of Empty DataFrame
#Columns: [col_01]
#Index: []>

[코드 3] 빈 데이터프레임에 열 추가하기

[코드 3]을 보면 데이터프레임명['추가하고자 하는 열의 이름'] = ''의 형태로, 빈 문자열을 새로 생성한 열에 할당 하는 것을 볼 수 있다. 이 때 빈 문자열의 형태를 확인하려면 [코드 2]의 데이터프레임에서 살펴봐야 한다. 

empty_df_02['col_01'] = ''

empty_df_02

[코드 4] 데이터프레임에 열 추가하기

[그림 3] 빈 문자열로 추가한 새로운 열
[그림 3] 빈 문자열로 추가한 새로운 열

 [그림 3]을 보면 새로운 열 'col_01'이 빈 문자열로 생긴 것을 알 수 있다. 이것은 빈 열(columns)일까?

empty_df_02['col_01'] = 'a'

empty_df_02

[코드 5] 문자열 'a'로 추가한 새로운 열

[그림 4] 문자열 &#39;a&#39;로 추가한 새로운 열
[그림 4] 문자열 'a'로 추가한 새로운 열

 [그림 4]를 보면 새로운 열의 모든 데이터 값이 초기화했던 문자열을 가지는 것을 볼 수 있다. 결론적으로 [코드 4]로 추가한 열에는 '빈 문자열'을 할당한 열 데이터 값이 존재한다. 눈으로 보았을 때 아무것도 안 보일 뿐, 빈 문자열이 들어가 있는 형태이다.


빈 문자열 대신 'None'으로 열 추가하기

empty_df_02['추가'] = None

empty_df_02.info
#<bound method DataFrame.info of         ID   이름                  E-mail    추가
#0    apple  홍길동    apple@gaegosaeng.com  None
#1   banana  김철수   banana@gaegosaeng.com  None
#2  coconut  이미숙  coconut@gaegosaeng.com  None>

[코드 6] None으로 빈 열 추가하기

[그림 5] None으로 추가한 열
[그림 5] None으로 추가한 열

 [코드 6]은 할당 연산자로 빈 문자열 대신 'None'을 할당하여 열을 추가한 것입니다. 코드 내용과 그 결과는 앞서 살펴본 바와 같으므로 생략합니다.


2. .assign() 메서드로 빈 열 추가하기

assign_df = empty_df_02.assign(추가_2=None)

assign_df.info
#<bound method DataFrame.info of         ID   이름                  E-mail    추가  추가_2
#0    apple  홍길동    apple@gaegosaeng.com  None  None
#1   banana  김철수   banana@gaegosaeng.com  None  None
#2  coconut  이미숙  coconut@gaegosaeng.com  None  None>

[코드 7] .assign() 메서드로 빈 열 추가하기

[그림 6] .assign() 메서드로 열 추가하기
[그림 6] .assign() 메서드로 열 추가하기

 .assign() 메서드는 간단하게 소괄호() 안에 열 이름과 일괄로 할당하고자 하는 을 입력하면 열을 추가할 수 있습니다. 주의할 점은 열 이름을 입력할 때 ''문자열로 작성하지 않는다는 점입니다.


empty_df_02 = empty_df_02.assign(추가_2=None)

empty_df_02.info
#<bound method DataFrame.info of         ID   이름                  E-mail    추가  추가_2
#0    apple  홍길동    apple@gaegosaeng.com  None  None
#1   banana  김철수   banana@gaegosaeng.com  None  None
#2  coconut  이미숙  coconut@gaegosaeng.com  None  None>

[코드 8] .assign()으로 원본 데이터프레임 열 추가하기

 .assign() 메서드는 원본 데이터프레임에 열을 추가하고 싶을 때, 자기 자신에게 추가된 데이터프레임을 할당하므로써 구현 가능합니다. 


3. .reindex() 메서드로 빈 열 추가하기

assign_df_02 = assign_df.reindex(columns = assign_df.columns.tolist() + ['추가_3','추가_4'])

assign_df_02.info
#<bound method DataFrame.info of         ID   이름                  E-mail    추가  추가_2  추가_3  추가_4
#0    apple  홍길동    apple@gaegosaeng.com  None  None   NaN   NaN
#1   banana  김철수   banana@gaegosaeng.com  None  None   NaN   NaN
#2  coconut  이미숙  coconut@gaegosaeng.com  None  None   NaN   NaN>

[코드 9] .reindex() 메서드로 빈 열 추가하기

[그림 6] .assign() 메서드로 열 추가하기
[그림 7] .reindex() 메서드로 열 추가하기

.reindex() 메서드는 'columns= 데이터프레임 이름.columns.tolist() + 추가하고픈 열 리스트'의 형태로 열을 추가할 수 있습니다.


assign_df = assign_df.reindex(columns = assign_df.columns.tolist() + ['추가_3','추가_4'])

assign_df.info
#<bound method DataFrame.info of         ID   이름                  E-mail    추가  추가_2  추가_3  추가_4
#0    apple  홍길동    apple@gaegosaeng.com  None  None   NaN   NaN
#1   banana  김철수   banana@gaegosaeng.com  None  None   NaN   NaN
#2  coconut  이미숙  coconut@gaegosaeng.com  None  None   NaN   NaN>

[코드 10] .reindex() 메서드로 원본 데이터프레임 열 추가하기

 원본 데이터프레임을 수정하고 싶다면 스스로에게 추가된 데이터프레임을 할당하여 구현할 수 있습니다.


4. .insert() 메서드로 원본 데이터프레임에서 원하는 위치에 열 추가하기

assign_df.insert(0, '추가_5', None)

assign_df.info
#<bound method DataFrame.info of    추가_5       ID   이름                  E-mail    추가  추가_2  추가_3  추가_4
#0  None    apple  홍길동    apple@gaegosaeng.com  None  None   NaN   NaN
#1  None   banana  김철수   banana@gaegosaeng.com  None  None   NaN   NaN
#2  None  coconut  이미숙  coconut@gaegosaeng.com  None  None   NaN   NaN>

[코드 11] .insert() 메서드로 원본 데이터프레임에 열 추가하기

[그림 8] .insert() 메서드로 원하는 위치에 열 추가하기
[그림 8] .insert() 메서드로 원하는 위치에 열 추가하기

 [코드 11]을 살펴보면 .insert() 메서드는 할당 연산자를 필요로 하지 않습니다. 억지로 할당 연산자를 추가해서 다른 데이터프레임에 수정된 결과를 넣고 싶어도 코드에러가 납니다. 이는 .insert() 메서드가 원본프레임에 단독으로 작용하는 메서드이기 때문입니다. .insert() 메서드는 원본 데이터프레임만을 수정할 수 있다는 것을 기억하시기 바랍니다.

 소괄호() 안에 들어가는 입력 값들은 순서대로 다음과 같은 의미를 갖습니다.

0 = 들어갈 열의 위치
'추가_5' = 열의 이름
None = 추가되는 열에 일괄적용되는 데이터 값

 열의 위치가 0번이므로 제일 앞으로 열을 추가하게 됩니다. 그 결과는 [그림 8]을 보면 확인할 수 있습니다. 만약 0 대신에 1을 입력했다면 '열 ID' 뒤에 새로운 열이 추가되었을 것입니다. 기존에 알아봤던 모든 방법이 가장 맨 뒤로 열을 추가했다면 .insert() 메서드는 사용자가 원하는 위치에 열을 추가할 수 있다는 차이점이 있습니다.


5. .apply() 메서드로 빈 열 추가하기

assign_df['추가_6'] = assign_df.apply(lambda _: None, axis=1)

assign_df.info
#<bound method DataFrame.info of    추가_5       ID   이름                  E-mail    추가  추가_2  추가_3  추가_4  추가_6
#0  None    apple  홍길동    apple@gaegosaeng.com  None  None   NaN   NaN  None
#1  None   banana  김철수   banana@gaegosaeng.com  None  None   NaN   NaN  None
#2  None  coconut  이미숙  coconut@gaegosaeng.com  None  None   NaN   NaN  None>

[코드 12] .apply() 메서드로 빈 열 추가하기

 [코드 12]를 보면 맨 처음 살펴 본 할당 연산자의 형태가 보입니다. 이번에 살펴보는 .apply() 메서드로 열을 추가하는 방법의 좌변은 할당 연산자를 사용해 열을 추가하는 방식과 동일합니다. 우변에서는 .apply() 메서드로 추가되는 열의 기타 설정 값들을 다룹니다. lambda _: 뒤에는 열에 일괄적으로 적용할 값이 들어갑니다. axis=는 행과 열에 대한 설정을 하는 것으로 0은 행, 1은 열을 뜻합니다. 


정리

할당 연산자 '=' 을 이용한 새로운 열 추가하기
.assign()
.reindex()
.insert()
.apply()

갈무리

 pandas에서 DataFrame에 열을 추가하는 방법은 다양합니다. 본인의 코드에 맞는 방법을 선정해서 사용하시기 바랍니다. 예시는 대부분의 데이터 값을 직접 입력했지만, 실제로는 변수에 값을 할당하고 데이터프레임의 각종 메서드를 통해 변수를 불러와 사용하게 됩니다. 

 앞으로 변동사항이 있다면 갈무리에서 추가적으로 언급할 예정입니다. 만약 이전 버전의 글을 열람했다가 업데이트된 글로 다시 읽게 된다면 이 갈무리 부분을 참고하시기 바랍니다.

반응형