파이썬 Pandas DataFrame에 새로운 열 추가하기
파이썬의 Pandas 라이브러리는 데이터 분석에 있어서 가장 강력한 도구 중 하나입니다. Pandas의 핵심 데이터 구조인 DataFrame은 표 형태의 데이터를 효율적으로 관리하고 분석할 수 있도록 해줍니다.
이번에는 기존의 DataFrame에 새로운 열을 추가하는 다양한 방법에 대해 알아보겠습니다.
새로운 열 직접 할당하기
가장 간단한 방법은 새로운 열의 이름을 사용하여 값을 직접 할당하는 것입니다.
import pandas as pd
# 간단한 DataFrame 생성
data = {'컬럼1': [1, 2, 3], '컬럼2': [4, 5, 6]}
df = pd.DataFrame(data)
# 새로운 열 '컬럼3' 추가
df['컬럼3'] = [7, 8, 9]
print(df)
리스트 또는 Series를 사용하여 할당하기
기존에 리스트나 Series 형태로 데이터를 가지고 있다면, 이를 새로운 열에 할당할 수 있습니다.
import pandas as pd
# 간단한 DataFrame 생성
data = {'컬럼1': [1, 2, 3], '컬럼2': [4, 5, 6]}
df = pd.DataFrame(data)
# 새로운 열 '컬럼3'에 리스트 할당
new_column = [10, 11, 12]
df['컬럼3'] = new_column
print(df)
함수를 이용하여 새로운 열 생성하기
더 복잡한 연산이 필요한 경우에는 함수를 이용하여 새로운 열을 생성할 수 있습니다.
import pandas as pd
# 간단한 DataFrame 생성
data = {'컬럼1': [1, 2, 3], '컬럼2': [4, 5, 6]}
df = pd.DataFrame(data)
# '컬럼1'의 값에 10을 더하여 '컬럼3' 생성
df['컬럼3'] = df['컬럼1'] * 10
print(df)
특정 위치에 열 삽입하기
insert()
메서드를 사용하면 특정 위치에 새로운 열을 삽입할 수 있습니다.
import pandas as pd
# 간단한 DataFrame 생성
data = {'컬럼1': [1, 2, 3], '컬럼2': [4, 5, 6]}
df = pd.DataFrame(data)
# '컬럼1' 다음에 '컬럼3' 삽입
df.insert(1, '컬럼3', [7, 8, 9])
print(df)
여러 열 한꺼번에 추가하기
assign()
메서드를 사용하면 여러 개의 새로운 열을 한꺼번에 추가할 수 있습니다.
import pandas as pd
# 간단한 DataFrame 생성
data = {'컬럼1': [1, 2, 3], '컬럼2': [4, 5, 6]}
df = pd.DataFrame(data)
# 여러 개의 새로운 열 추가
df = df.assign(컬럼3=[7, 8, 9], 컬럼4=[10, 11, 12])
print(df)
추가 고려 사항
- 데이터 타입: 새로운 열에 할당하는 데이터의 타입이 기존 DataFrame의 다른 열과 일관성을 유지하는 것이 좋습니다.
- NaN 값: 새로운 열에 값이 없는 경우 NaN 값으로 채워질 수 있습니다. 이를 방지하려면 미리 값을 채워넣거나,
fillna()
메서드를 사용하여 NaN 값을 처리할 수 있습니다. - 성능: 많은 양의 데이터를 처리할 때는 성능에 유의하여 메서드를 선택해야 합니다.
결론
Pandas DataFrame에 새로운 열을 추가하는 것은 매우 간단하고 직관적입니다. 위에서 소개한 다양한 방법들을 활용하여 데이터 분석에 필요한 새로운 열을 자유롭게 생성할 수 있습니다.
더 자세한 내용을 알고 싶으시면 다음과 같은 키워드로 검색해보세요:
- 파이썬 pandas DataFrame 열 추가
- pandas assign
- pandas insert
- pandas 새로운 열 생성
Pandas DataFrame에 새로운 열 추가하기: 다양한 예시 코드
앞서 설명한 내용을 바탕으로, 실제 데이터 분석에서 자주 활용되는 다양한 예시 코드를 살펴보겠습니다.
간단한 DataFrame 생성 및 새로운 열 추가
import pandas as pd
# 딕셔너리를 이용하여 DataFrame 생성
data = {'이름': ['홍길동', '김철수', '박영희'],
'나이': [30, 25, 32],
'성별': ['남', '남', '여']}
df = pd.DataFrame(data)
# 새로운 열 '직업' 추가
df['직업'] = ['개발자', '디자이너', '데이터 분석가']
print(df)
기존 열 값을 기반으로 새로운 열 생성
import pandas as pd
# DataFrame 생성
data = {'수학': [80, 95, 72],
'영어': [75, 88, 90]}
df = pd.DataFrame(data)
# 두 과목의 평균 점수를 새로운 열 '평균'에 저장
df['평균'] = (df['수학'] + df['영어']) / 2
print(df)
조건에 따른 값 할당
import pandas as pd
# DataFrame 생성
data = {'나이': [25, 35, 20, 40]}
df = pd.DataFrame(data)
# 나이가 30 이상이면 '성인', 아니면 '청년'으로 분류
df['연령대'] = ['성인' if x >= 30 else '청년' for x in df['나이']]
print(df)
함수를 이용하여 복잡한 연산 수행
import pandas as pd
import numpy as np
# DataFrame 생성
data = {'수익': [1000, 2500, 1500, 3000]}
df = pd.DataFrame(data)
# 수익이 2000 이상이면 '높음', 아니면 '낮음'으로 분류하는 함수 정의
def categorize_profit(profit):
if profit >= 2000:
return '높음'
else:
return '낮음'
# 함수 적용하여 새로운 열 생성
df['수익_등급'] = df['수익'].apply(categorize_profit)
print(df)
날짜 관련 데이터 처리
import pandas as pd
import datetime
# DataFrame 생성
data = {'날짜': ['2023-01-01', '2023-02-15', '2023-03-31']}
df = pd.DataFrame(data)
# 날짜 문자열을 datetime 형식으로 변환
df['날짜'] = pd.to_datetime(df['날짜'])
# 년도만 추출하여 새로운 열 생성
df['년도'] = df['날짜'].dt.year
print(df)
외부 데이터 불러오기 후 새로운 열 추가
import pandas as pd
# CSV 파일 읽어오기
df = pd.read_csv('sales_data.csv')
# 새로운 열 '총 판매액' 추가
df['총 판매액'] = df['판매량'] * df['단가']
print(df)
다양한 활용 예시:
- 데이터 가공: 결측치 처리, 데이터 정규화, 새로운 특징 생성 등
- 데이터 분석: 그룹별 통계, 상관관계 분석, 시계열 분석 등
- 머신러닝: 모델 학습을 위한 특징 엔지니어링 등
주의 사항:
- 데이터 타입: 새로운 열에 할당하는 데이터의 타입이 기존 열과 일치하는지 확인해야 합니다.
- 인덱스: 새로운 열을 추가할 때 인덱스가 올바르게 설정되어 있는지 확인해야 합니다.
- 메모리: 대용량 데이터를 처리할 때는 메모리 사용량에 유의해야 합니다.
- pandas DataFrame 새로운 열 추가
- pandas apply
- pandas to_datetime
- pandas read_csv
Pandas DataFrame에 새로운 열 추가하는 다른 방법들
지금까지 Pandas DataFrame에 새로운 열을 추가하는 다양한 방법들을 살펴보았습니다. 이 외에도 DataFrame을 다루는 데 유용한 다른 방법들이 있습니다.
concat() 함수를 이용한 병합
- 여러 DataFrame 병합: 여러 개의 DataFrame을 하나로 합칠 때 사용합니다.
- 새로운 열 추가: 새로운 열을 가진 DataFrame을 생성하여 기존 DataFrame과 연결합니다.
import pandas as pd
# 기존 DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 새로운 열을 가진 DataFrame
df2 = pd.DataFrame({'C': [7, 8, 9]})
# DataFrame 병합 (열 방향으로)
df_new = pd.concat([df1, df2], axis=1)
print(df_new)
assign() 메서드를 이용한 다중 할당
- 여러 개의 새로운 열 한꺼번에 생성: 여러 개의 새로운 열을 동시에 생성하고 할당할 때 효율적입니다.
- 연산 결과 바로 할당: 복잡한 연산 결과를 새로운 열에 바로 할당할 수 있습니다.
import pandas as pd
# 기존 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 여러 개의 새로운 열 생성
df_new = df.assign(C=df['A'] * 2, D=df['B'] + 10)
print(df_new)
apply() 메서드를 이용한 함수 적용
- 각 행 또는 열에 함수 적용: 각 행 또는 열에 사용자 정의 함수를 적용하여 새로운 열을 생성할 수 있습니다.
- 복잡한 로직 구현: 복잡한 조건이나 연산을 수행할 때 유용합니다.
import pandas as pd
# 기존 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 각 값에 10을 더하는 함수 정의
def add_ten(x):
return x + 10
# 함수 적용하여 새로운 열 생성
df['C'] = df['A'].apply(add_ten)
print(df)
numpy를 이용한 벡터 연산
- 벡터화 연산: NumPy의 벡터화 연산을 이용하여 빠르게 새로운 열을 생성할 수 있습니다.
- 대규모 데이터 처리: 많은 양의 데이터를 처리할 때 효율적입니다.
import pandas as pd
import numpy as np
# 기존 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# NumPy를 이용한 벡터 연산
df['C'] = df['A'] * np.array([2, 3, 4])
print(df)
어떤 방법을 선택해야 할까요?
- 간단한 할당: 직접 할당, 리스트 또는 Series 할당
- 여러 열 동시 생성: assign()
- 복잡한 로직: apply()
- 벡터화 연산: numpy
- DataFrame 병합: concat()
최적의 방법은 데이터의 크기, 데이터 형태, 수행하려는 작업에 따라 달라집니다. 다양한 방법을 시도해보고 가장 효율적인 방법을 선택하는 것이 좋습니다.
- pandas concat
- pandas numpy
python pandas dataframe