이 튜토리얼에서는 Python의 대표적인 데이터 분석 라이브러리인 pandas를 활용해 데이터를 다루는 방법을 단계별로 살펴봅니다. pandas는 내부적으로 C 언어로 작성되어 있어 대용량 데이터를 처리할 때도 빠른 실행 속도를 자랑하며, 데이터 분석 분야에서 가장 널리 사용되는 라이브러리 중 하나입니다.
pandas에는 두 가지 핵심 데이터 구조가 있습니다. 바로 Series와 DataFrame입니다. 지금부터 하나씩 자세히 알아보겠습니다.
1. Series – 1차원 데이터 구조
Series는 인덱스(index)와 값(value)으로 구성된 1차원 배열입니다. pd.Series(data, index) 형태로 Series 객체를 생성할 수 있으며, 정수, 리스트, 딕셔너리 등 다양한 형태의 데이터를 입력으로 받을 수 있습니다.
기본 Series 생성하기
# pandas 라이브러리 임포트 import pandas as pd # 데이터 data = [1, 2, 3] # Series 객체 생성 # 인덱스를 지정하지 않으면 기본 인덱스(0, 1, 2...)가 자동으로 할당됩니다. series = pd.Series(data) print(series)
실행 결과
0 1 1 2 2 3 dtype: int64
커스텀 인덱스 사용하기
인덱스를 직접 지정하고 싶다면 아래 예제처럼 index 매개변수를 활용하면 됩니다.
# pandas 라이브러리 임포트 import pandas as pd # 데이터 data = [1, 2, 3] # 커스텀 인덱스 index = ['a', 'b', 'c'] # Series 객체 생성 series = pd.Series(data, index) print(series)
실행 결과
a 1 b 2 c 3 dtype: int64
딕셔너리로 Series 만들기
딕셔너리를 Series 클래스에 전달하면 키(key)는 인덱스로, 값(value)은 실제 데이터로 자동 변환됩니다.
# pandas 라이브러리 임포트
import pandas as pd
# 딕셔너리 데이터
data = {'a': 97, 'b': 98, 'c': 99}
# Series 객체 생성
series = pd.Series(data)
print(series)실행 결과
a 97 b 98 c 99 dtype: int64
인덱스로 데이터 접근하기
생성된 Series에서는 인덱스를 사용해 특정 값에 손쉽게 접근할 수 있습니다.
# pandas 라이브러리 임포트
import pandas as pd
# 딕셔너리 데이터
data = {'a': 97, 'b': 98, 'c': 99}
# Series 객체 생성
series = pd.Series(data)
# 인덱스를 이용해 데이터에 접근
print(series['a'], series['b'], series['c'])실행 결과
97 98 99
2. DataFrame – 행과 열을 갖춘 2차원 데이터 구조
Series 사용법을 익혔다면, 이제 pandas의 또 다른 핵심 구조인 DataFrame을 살펴보겠습니다. DataFrame은 행(row)과 열(column)로 구성된 2차원 표 형태의 데이터 구조로, 실제 데이터 분석 업무에서 가장 많이 사용되는 형식입니다.
DataFrame은 리스트, 딕셔너리, Series 등 다양한 데이터 소스로 생성할 수 있습니다. 먼저 리스트를 이용한 생성 방법을 보겠습니다.
리스트로 DataFrame 만들기
# pandas 라이브러리 임포트
import pandas as pd
# 리스트 데이터
names = ['Tutorialspoint', 'Mohit', 'Sharma']
ages = [25, 32, 21]
# DataFrame 생성
data_frame = pd.DataFrame({'Name': names, 'Age': ages})
# DataFrame 출력
print(data_frame)실행 결과
Name Age 0 Tutorialspoint 25 1 Mohit 32 2 Sharma 21
Series로 DataFrame 만들기
여러 개의 Series 객체를 묶어 하나의 DataFrame을 만들 수도 있습니다.
# pandas 라이브러리 임포트
import pandas as pd
# Series 객체들
_1 = pd.Series([1, 2, 3])
_2 = pd.Series([1, 4, 9])
_3 = pd.Series([1, 8, 27])
# DataFrame 생성
data_frame = pd.DataFrame({"a": _1, "b": _2, "c": _3})
# DataFrame 출력
print(data_frame)실행 결과
a b c 0 1 1 1 1 2 4 8 2 3 9 27
열 이름으로 데이터 접근하기
DataFrame에서는 열 이름(column name)을 사용해 특정 열 전체를 간편하게 조회할 수 있습니다.
# pandas 라이브러리 임포트
import pandas as pd
# Series 객체들
_1 = pd.Series([1, 2, 3])
_2 = pd.Series([1, 4, 9])
_3 = pd.Series([1, 8, 27])
# DataFrame 생성
data_frame = pd.DataFrame({"a": _1, "b": _2, "c": _3})
# 'a'라는 이름의 열 전체 출력
print(data_frame['a'])실행 결과
0 1 1 2 2 3 Name: a, dtype: int64
마무리
지금까지 pandas의 두 가지 핵심 데이터 구조인 Series와 DataFrame의 생성 방법과 데이터 접근 방법을 살펴보았습니다. 이 두 구조만 제대로 이해해도 pandas를 활용한 데이터 분석의 절반 이상을 마스터한 것입니다. 다음 단계로는 데이터 필터링, 그룹화(groupby), 결측치 처리 등 더 심화된 기능을 학습해 보시기 바랍니다.
튜토리얼을 진행하면서 궁금한 점이 있다면 댓글로 남겨주세요!