개요
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