Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas 기존 DataFrame에 새 열 추가하기 – insert()와 assign() 완벽 정리

Pandas의 DataFrame은 2차원 데이터 구조로, 데이터가 행(row)과 열(column)로 이루어진 표 형태로 정렬됩니다. Python의 딕셔너리(dict), 리스트(list), 시리즈(Series) 등 다양한 자료구조를 활용해 생성할 수 있습니다. 이 글에서는 기존 DataFrame에 새로운 열을 추가하는 대표적인 두 가지 방법을 예제와 함께 살펴보겠습니다.

먼저 Pandas Series를 사용해 DataFrame을 생성해 보겠습니다. 아래 예제에서는 Pandas Series를 하나의 열을 가진 DataFrame으로 변환하고, 열 이름을 Month_No로 지정합니다.

예제

import pandas as pd
s = pd.Series([6,8,3,1,12])
df = pd.DataFrame(s,columns=['Month_No'])
print (df)

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

    Month_No
0          6
1          8
2          3
3          1
4         12

insert() 함수 사용하기

Pandas의 insert() 함수는 지정한 인덱스 위치에 새로운 열을 삽입합니다. 아래 예제에서는 한 달의 일수를 나타내는 No_of_days 열을 기존 DataFrame의 인덱스 위치 1에 추가합니다. 마지막 인자인 True는 중복된 열 이름을 허용한다는 의미입니다.

예제

import pandas as pd
s = pd.Series([6,8,3,1,12])
df = pd.DataFrame(s,columns=['Month_No'])

# 인덱스 위치 1에 새로운 열을 삽입합니다.
df.insert(1,"No_of_days",[30,31,31,31,31],True)
print (df)

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

    Month_No No_of_days
0          6         30
1          8         31
2          3         31
3          1         31
4         12         31

assign() 함수 사용하기

assign() 함수는 기존 DataFrame을 직접 수정하지 않고, 새로운 열이 추가된 새로운 DataFrame 객체를 반환합니다. 새로운 열은 항상 DataFrame의 맨 끝에 추가되며, 메서드 체이닝(method chaining)과 함께 사용하기에 매우 적합합니다.

예제

import pandas as pd
s = pd.Series([6,8,3,1,12])
df = pd.DataFrame(s,columns=['Month_No'])

# 맨 끝에 새로운 열을 추가합니다.
df = df.assign(No_of_days = [30,31,31,31,31])

print (df)

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

    Month_No No_of_days
0          6         30
1          8         31
2          3         31
3          1         31
4         12         31

두 방법의 차이점 정리

insert()는 원하는 인덱스 위치에 열을 직접 삽입하며 원본 DataFrame 자체를 변경(in-place)합니다. 반면 assign()은 항상 맨 끝에 열을 추가하고, 원본은 그대로 유지한 채 새로운 DataFrame을 반환합니다. 따라서 특정 위치에 열을 넣어야 한다면 insert()를, 원본 보존과 함수형 스타일의 코드 작성이 필요하다면 assign()을 사용하는 것이 좋습니다.