데이터프레임(DataFrame)이란?
데이터프레임은 행(row)과 열(column)로 이루어진 표 형태로 데이터를 저장하는 2차원 데이터 구조입니다. 관계형 데이터베이스의 SQL 테이블이나 엑셀 스프레드시트와 비슷한 모습이라고 생각하면 이해하기 쉽습니다.
pandas 라이브러리에서는 다음 생성자를 사용해 데이터프레임을 만들 수 있습니다.
pd.DataFrame(data, index, columns, dtype, copy)
기존 데이터프레임에 새 열을 추가하는 방법은 여러 가지가 있습니다. 그중 대표적인 방법 하나는, 먼저 Series 데이터 구조를 생성한 뒤 이를 기존 데이터프레임에 새로운 열로 전달하는 것입니다.
예제 코드
import pandas as pd
my_data = {'ab': pd.Series([1, 8, 7], index=['a', 'b', 'c']),
'cd': pd.Series([1, 2, 0, 9], index=['a', 'b', 'c', 'd'])}
my_df = pd.DataFrame(my_data)
print("데이터프레임 :")
print(my_df)
print("Series 구조를 새 열로 전달해 데이터프레임에 추가 :")
my_df['ef'] = pd.Series([56, 78, 32], index=['a', 'b', 'c'])
print("새 열을 추가한 후의 데이터프레임 :")
print(my_df)실행 결과
데이터프레임 :
ab cd
a 1.0 1
b 8.0 2
c 7.0 0
d NaN 9
Series 구조를 새 열로 전달해 데이터프레임에 추가 :
새 열을 추가한 후의 데이터프레임 :
ab cd ef
a 1.0 1 56.0
b 8.0 2 78.0
c 7.0 0 32.0
d NaN 9 NaN코드 설명
- 필요한 라이브러리(pandas)를 임포트하고, 사용 편의를 위해 별칭(alias)을 지정합니다.
- 딕셔너리 자료구조를 생성하며, 하나의 딕셔너리 안에 키-값 쌍이 담겨 있습니다.
- 이런 식으로 여러 개의 딕셔너리를 만들어 하나의 객체에 저장할 수 있습니다.
- 키-값 쌍에서 '값(value)'에 해당하는 부분이 실제로는 Series 데이터 구조입니다.
- 인덱스 역시 사용자가 직접 지정한 값 목록입니다.
- 이 딕셔너리는 이후 pandas 라이브러리의 'DataFrame' 함수에 매개변수로 전달됩니다.
- 딕셔너리의 값들을 매개변수로 넘겨 데이터프레임이 생성됩니다.
- 새로운 열('ef')을 하나 더 만들고 값을 초기화합니다.
- 이 새 열을 원본 데이터프레임에 인덱싱하여 연결합니다.
- 이 과정을 통해 새 열이 데이터프레임에 바인딩(결합)됩니다.
- 최종적으로 데이터프레임이 콘솔에 출력됩니다.
참고 − 'NaN'은 'Not a Number'의 약자로, 해당 [행, 열] 위치에 유효한 값이 존재하지 않는다는 의미입니다. 위 예제에서 'ab' 열에는 'd' 인덱스에 해당하는 값이 없고, 새로 추가된 'ef' 열에도 'd' 인덱스 값이 없기 때문에 NaN이 표시됩니다.
새 열을 추가하는 다른 방법들
1. 리스트 값 직접 할당
대괄호 표기법으로 새 열 이름을 지정하고 값을 바로 할당할 수도 있습니다. 단, 리스트의 길이는 데이터프레임의 행 수와 같아야 합니다.
my_df['ef'] = [56, 78, 32, 45]
2. insert() 메서드
insert() 메서드를 사용하면 원하는 위치에 새 열을 삽입할 수 있습니다.
my_df.insert(loc=1, column='ef', value=[56, 78, 32, 45])
3. assign() 메서드
assign() 메서드는 원본 데이터프레임을 수정하지 않고, 새 열이 추가된 복사본을 반환합니다.
new_df = my_df.assign(ef=[56, 78, 32, 45])
상황에 따라 적절한 방법을 선택하면 됩니다. 기존 인덱스에 맞춰 값을 채워야 한다면 Series를 활용한 방법이, 단순히 값을 나열하면 되는 경우라면 리스트 할당이 가장 간편합니다.