Python/NumPy | Pandas

[Python] Pandas - 여러 컬럼 추가

비번변경 2023. 5. 11. 23:03

개요

DataFrame에 스칼라 값인 컬럼이 여럿 추가하고 싶을 때는 단순 할당을 반복하거나,

import numpy as np
import pandas as pd

map_code_message = [
    {'code':'00','return_message':'Continue'},
    {'code':'01','return_message':'Switching Protocol'},
    {'code':'02','return_message':'Processing'},
    {'code':'03','return_message':'Early Hints'},
]
df = pd.DataFrame(map_code_message)

df['server'] = 'web'
df['stage_env'] = 'dev'

insert 함수를 반복해서 사용할 수 있다.

df.insert(loc=0, column='server', value='web')
df.insert(loc=1, column='stage_env', value='dev')

한 번에 여러 스칼라 컬럼을 추가하는 방법은 없을까? 사용할 수 있는 여러 가지 방법을 정리해 둔다.

 

 

list 압축 해제

추가할 컬럼을 튜플처럼 나열하고, 값은 list 묶어 할당한다.

df['col_name1'], df['col_name2'], df['col_name3']... = [val1, val2, val3, ...]

# 예시
df['server'], df['stage_env'] = ['web', 'dev']

 

 

크기가 같은 df 생성 후 할당

추가할 값으로 이루어진 DataFrame을 생성하여 할당한다. 이때, DataFrame 간의 크기가 동일해야 하므로 index 속성을 이용해 컬럼을 추가할 DataFrame의 길이를 전달한다.

df[['col_name1', 'col_name2', 'col_name3', ...]] = pd.DataFrame([[val1, val2, val3, ...]], index=df.index)

# 예시
df[['server', 'stage_env']] = pd.DataFrame([['web', 'dev']], index=df.index)

 

 

크기가 같은 df 생성 후 concat

추가할 값으로 구성되고, 크기가 동일한 DataFame을 생성하여 기존 DataFrame에 연결(concat)한다.

df_tmp = pd.DataFrame([[val1, val2, val3, ...], 
            index=df.index, 
            columns=['col_name1', 'col_name2', 'col_name3', ...])
df = pd.concat([df, df_tmp], axis=1)


# 예시
df_tmp = pd.DataFrame([['dev', 'web']], 
            index=df.index, 
            columns=['stage_env', 'server',])
df = pd.concat([df, df_tmp], axis=1)

 

 

assign 함수 사용

assign 함수에 추가할 컬럼의 이름과 값을 key-value 형식으로 나열하여 전달한다.

df = df.assign(col_name1=val1, col_name2=val2, col_name3=val3, ...)

# 예시
df = df.assign(server='web', stage_env='dev')

또는 dictionary 형식으로 전달할 수도 있다.

df = df.assign(**{'col_name1': val1, 'col_name2': val2, 'col_name3': val3, ...)

# 예시
df = df.assign(**{'server': 'web', 'stage_env': 'dev'})

 

 

참고 문서

How to add multiple columns to pandas dataframe in one assignment

https://sonseungha.tistory.com/688

 

728x90