데이터프레임?
데이터프레임(DataFrame)은 판다스에서 가장 중요한 데이터 구조로, 2차원 형태의 표처럼 데이터를 저장하고 관리합니다. 마치 엑셀의 스프레드시트와 비슷한 구조를 가지고 있어서, 행(row)과 열(column)으로 구성된 데이터를 효율적으로 다룰 수 있습니다.
데이터프레임의 각 열은 서로 다른 타입의 데이터(숫자, 문자열, 날짜) 등을 저장할 수 있으며, 인덱스(index)를 통해 각 행을 고유하게 식별할 수 있습니다. 이러한 구조는 데이터 분석, 통계 처리, 데이터 변환 등 다양한 작업을 수행하는 데 매우 유용합니다.
데이터프레임도 자료형입니다!
파이썬에서 데이터프레임은 판다스 라이브러리에서 제공하는 하나의 사용자 정의 자료형(Custom Data Type)입니다. 마치 정수형(int), 문자열(str), 리스트(list)처럼, 데이터프레임도 특정한 데이터 구조와 동작을 정의한 자료형입니다.
데이터프레임의 특징을 자료형의 관점에서 살펴보면
•
고유한 메서드: 다른 자료형처럼 자체적인 메서드(예: head(), tail(), info())를 가지고 있습니다.
•
타입 확인 가능: type() 함수를 사용하여 pandas.DataFrame 타입임을 확인할 수 있습니다.
•
연산자 오버로딩: +, -, *, / 등의 연산자가 데이터프레임에 맞게 재정의되어 있습니다.
import pandas as pd # import 이해하기
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3]})
# 타입 확인
print(type(df)) # <class 'pandas.core.frame.DataFrame'>
Python
복사
df 생성 방법론
데이터프레임은 크게 두 가지 방식으로 만들 수 있습니다. 첫 번째는 외부 데이터 소스(CSV, Excel, SQL 데이터베이스)에서 데이터를 읽어와서 생성하는 방법입니다. pandas 라이브러리는 read_csv(), read_excel(), read_sql() 등 다양한 파일 형식을 읽어올 수 있는 함수들을 제공합니다.
두 번째는 프로그래밍 코드 내에서 직접 데이터프레임을 생성하는 방법입니다. 이는 딕셔너리나 리스트와 같은 파이썬의 기본 자료구조를 사용하여 새로운 데이터프레임을 만드는 것입니다. 이 방법은 특히 테스트용 데이터를 만들거나, 작은 규모의 데이터를 다룰 때 유용합니다.
두 방법 모두 pandas의 DataFrame 클래스를 사용하여 최종적으로 같은 형태의 데이터프레임을 생성하며, 생성된 후에는 동일한 방식으로 데이터를 조작하고 분석할 수 있습니다.
이번 페이지에서는 데이터프레임을 직접 생성하는 두 번째 방법에 대해 자세히 살펴보겠습니다. 딕셔너리와 리스트를 사용하여 데이터프레임을 만드는 방법을 실제 예제 코드와 함께 알아볼 것입니다.
특히 이러한 직접 생성 방법은 데이터 구조를 이해하고 실습하는데 매우 효과적입니다. 작은 규모의 샘플 데이터로 시작하여 데이터프레임의 기본 개념을 습득할 수 있습니다.
df 생성하기1
데이터프레임을 생성하는 가장 기본적인 방법은 딕셔너리(dictionary)를 사용하는 것입니다. 각 키(key)는 열 이름이 되고, 값(value)은 해당 열의 데이터가 됩니다.
import pandas as pd
# 딕셔너리를 사용하여 데이터프레임 생성
data = {
'이름': ['김철수', '이영희', '박민수'],
'나이': [25, 28, 22],
'점수': [85, 92, 78]
}
df = pd.DataFrame(data)
print(df)
Python
복사
위 코드를 실행하면 다음과 같은 데이터프레임이 생성됩니다
이름 나이 점수
0 김철수 25 85
1 이영희 28 92
2 박민수 22 78
Python
복사
df 생성하기2
리스트를 사용하여 데이터프레임을 생성할 수도 있습니다. 이 방법은 2차원 리스트를 사용하며, columns 매개변수를 통해 열 이름을 지정할 수 있습니다.
import pandas as pd
# 리스트를 사용하여 데이터프레임 생성
data = [
['김철수', 25, 85],
['이영희', 28, 92],
['박민수', 22, 78]
]
df = pd.DataFrame(data, columns=['이름', '나이', '점수'])
print(df)
Python
복사
이 방법은 데이터가 행 단위로 구성되어 있을 때 특히 유용합니다. 출력 결과는 딕셔너리 방식과 동일합니다
이름 나이 점수
0 김철수 25 85
1 이영희 28 92
2 박민수 22 78
Python
복사
df 생성하기3 - 인덱스 지정
데이터프레임을 생성할 때 인덱스(index)를 직접 지정할 수 있습니다. 기본적으로는 0부터 시작하는 정수형 인덱스가 자동으로 생성되지만, 필요에 따라 사용자 정의 인덱스를 설정할 수 있습니다.
import pandas as pd
# 인덱스를 지정하여 데이터프레임 생성
data = {
'이름': ['김철수', '이영희', '박민수'],
'나이': [25, 28, 22],
'점수': [85, 92, 78]
}
# 인덱스 지정
index = ['학생1', '학생2', '학생3']
df = pd.DataFrame(data, index=index)
print(df)
Python
복사
위 코드를 실행하면 다음과 같이 사용자가 지정한 인덱스를 가진 데이터프레임이 생성됩니다
이름 나이 점수
학생1 김철수 25 85
학생2 이영희 28 92
학생3 박민수 22 78
Python
복사
이처럼 의미 있는 인덱스를 지정함으로써 데이터를 더 직관적으로 식별하고 접근할 수 있습니다. 특히 데이터의 고유 식별자가 있는 경우 이를 인덱스로 활용하면 데이터 관리가 더욱 용이해집니다.
df 생성하기4 - 멀티인덱스
멀티인덱스(MultiIndex)는 데이터프레임에서 두 개 이상의 계층으로 구성된 인덱스 구조를 만들 수 있게 해줍니다. 예를 들어, '과목'과 '시험 종류'처럼 서로 연관된 카테고리를 계층적으로 구성할 수 있어서, 복잡한 데이터를 더 논리적으로 정리하고 분석할 수 있습니다. 특히 여러 범주의 데이터를 그룹화하거나 다양한 수준에서 데이터를 분석해야 할 때 매우 효과적입니다.
import pandas as pd
# 멀티인덱스 데이터프레임 생성
data = {
('수학', '중간고사'): [85, 92, 78],
('수학', '기말고사'): [88, 95, 85],
('영어', '중간고사'): [92, 87, 90],
('영어', '기말고사'): [95, 89, 88]
}
# 행 인덱스 생성
index = ['김철수', '이영희', '박민수']
# 멀티인덱스 데이터프레임 생성
df = pd.DataFrame(data, index=index)
print(df)
Python
복사
위 코드를 실행하면 다음과 같은 멀티인덱스 데이터프레임이 생성됩니다
수학 영어
중간고사 기말고사 중간고사 기말고사
김철수 85 88 92 95
이영희 92 95 87 89
박민수 78 85 90 88
Python
복사