안녕하세요! 판다스 라이브러리 관련 첫 포스팅입니다! 😎
판다스는 넘파이 라이브러리와 연결고리가 많습니다.
바로 이번 포스팅에서 살펴볼 Series가 넘파이 배열에 기반한 판다스 자료구조입니다.
그러면 지금부터 본격적으로 Series에 대해 알아보도록 하겠습니다.
import pandas as pd
import numpy as np
1. Series 특징
Series는 판다스 라이브러리의 가장 기본적인 자료구조입니다.
1차원 배열과 유사한 Series는 다음 2가지 특징을 갖습니다.
- 동일한 타입의 데이터만 담을 수 있습니다.
- 각 값에 레이블 또는 순서를 할당합니다. 이 두 참조점을 사용하면 Series 데이터에 접근이 가능합니다.
flavors = ['chocolate', 'vanilla', 'strawberry', 'blueberry']
print(pd.Series(flavors))
# 0 chocolate
# 1 vanilla
# 2 strawberry
# 3 blueberry
# dtype: object
Series는 파이썬 리스트와 딕셔너리의 특징을 동시에 갖습니다.
리스트처럼 일렬로 놓인 순서에 따라 값을 저장하고 딕셔너리처럼 각 값에 키(레이블)를 할당합니다.
2. Series 생성하기
flavors = ['chocolate', 'vanilla', 'strawberry', 'blueberry']
flavors_series = pd.Series(flavors)
print(flavors_series)
# 0 chocolate
# 1 vanilla
# 2 strawberry
# 3 blueberry
# dtype: object
print(flavors_series[1])
# vanilla
우선 파이썬 리스트를 사용해서 간단하게 Series를 만드는 방법이 있습니다.
이때 리스트에 담긴 값들의 순서는 유지됩니다.
flavors = ['chocolate', 'vanilla', 'strawberry', 'blueberry']
days = ['Monday', 'Wednesday', 'Friday', 'Sunday']
plans = pd.Series(flavors, days)
print(plans)
# Monday chocolate
# Wednesday vanilla
# Friday strawberry
# Sunday blueberry
# dtype: object
print(plans['Monday'])
# chocolate
매개변수 index에 데이터와 동일한 길이의 인수를 전달하면 Series의 인덱스를 지정합니다.
전달한 인덱스, 즉 레이블 값으로 Series에 담긴 값에 접근할 수 있습니다.
temperatures = [33, 30, 28, np.nan, 29]
temp = pd.Series(temperatures)
print(temp)
# 0 33.0
# 1 30.0
# 2 28.0
# 3 NaN
# 4 29.0
# dtype: float64
Series는 결측값을 포함할 수 있습니다.
결측값을 포함하면 Series의 타입은 float 타입으로 자동 변환됩니다.
2-1. 딕셔너리로 Series 생성하기
mathGrade_dict = {
'jason': 100,
'harriet': 96,
'kelly': 82
}
mathGrade = pd.Series(mathGrade_dict)
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
딕셔너리의 key값들이 Series의 레이블로 설정됩니다.
2-2. 튜플로 Series 생성하기
rgb_tuples = [(119, 32, 24), (194, 94, 45)]
rgb = pd.Series(rgb_tuples)
print(rgb)
# 0 (119, 32, 24)
# 1 (194, 94, 45)
# dtype: object
리스트를 사용해서 Series를 생성하는 방법과 동일합니다.
단, 튜플을 담은 Series를 만들기 위해서는 각 튜플을 리스트로 감싸야 합니다.
2-3. 넘파이 배열로 Series 생성하기
random_ndarray = np.random.randint(1, 101, 5)
random = pd.Series(random_ndarray)
print(random)
# 0 76
# 1 73
# 2 39
# 3 70
# 4 79
# dtype: int64
리스트와 튜플을 전달해서 Series를 생성하는 방법과 동일합니다.
2-4. 집합으로 Series 생성하기
집합은 순서가 없는 자료구조이기 때문에 Series를 생성할 수 없습니다.
3. Series 속성
3-1. index, values
mathGrade_dict = {
'jason': 100,
'harriet': 96,
'kelly': 82
}
mathGrade = pd.Series(mathGrade_dict)
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
# ✅ index 속성
print(mathGrade.index)
# Index(['jason', 'harriet', 'kelly'], dtype='object')
print(type(mathGrade.index))
# <class 'pandas.core.indexes.base.Index'>
# ✅ values 속성
print(mathGrade.values)
# [100 96 82]
print(type(mathGrade.values))
# <class 'numpy.ndarray'>
index 속성은 인덱스 레이블로 구성된 판다스 Index 객체입니다.
인덱스 레이블을 별도로 지정하지 않으면 RangeIndex 객체를 리턴합니다.
values 속성은 Series의 값들을 담은 넘파이 배열을 리턴합니다.
바로 이 부분에서도 판다스와 넘파이 라이브러리 사이의 연결고리를 확인할 수 있습니다.
3-2. dtype
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
print(mathGrade.dtype)
# dtype('int64')
dtype 속성은 Series를 구성하는 데이터의 타입을 의미합니다.
Series는 단 한 가지 타입의 데이터들로만 구성되기 때문에 오로지 하나의 결과값을 리턴합니다.
3-3. size
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
print(mathGrade.size)
# 3
size 속성은 Series에 들어있는 데이터의 개수를 리턴합니다.
3-4. shape
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
print(mathGrade.shape)
# (3,)
print(type(mathGrade.shape))
# <class 'tuple'>
shape 속성은 Series의 차원 정보를 튜플 형식으로 리턴합니다.
Series는 1차원 배열이기 때문에 튜플의 2번째 값이 생략된 상태로 반환됩니다.
3-5. is_unique
print(mathGrade)
# jason 100
# harriet 96
# kelly 82
# dtype: int64
print(mathGrade.is_unique)
# True
is_unique 속성은 Series가 고유한 값들로 구성되는지 여부를 리턴합니다.
고유한 값들로 구성되어 있으면 True를, 그렇지 않으면 False를 리턴합니다.
3-6. name
sales = [0, 5, 155, 0, 518, 0, 1827]
sales_series = pd.Series(sales, name='Sales')
print(sales_series)
# 0 0
# 1 5
# 2 155
# 3 0
# 4 518
# 5 0
# 6 1827
# Name: Sales, dtype: int64
name 속성을 사용하면 Series의 이름을 설정할 수 있습니다.
마치며
이상으로 판다스의 기본 자료구조인 Series에 대한 파트1 정리를 마치도록 하겠습니다.
앞으로 살펴볼 데이터프레임의 기초를 담당하고 있는 만큼 확실하게 이해할 필요성이 느껴집니다.
다음 포스팅에서는 Series의 연산과 여러 메서드에 대해 알아보도록 하겠습니다.
'파이썬・ML > pandas' 카테고리의 다른 글
판다스 데이터프레임 정리(2) 결측값/중복값/필터링/정렬 등 (0) | 2023.07.30 |
---|---|
판다스 데이터프레임 정리(1) 주요속성/메서드/조회 (0) | 2023.07.28 |
판다스 Series 정리(2) 인덱싱/필터링/정렬/연산/결측값 (0) | 2023.07.27 |
판다스 데이터프레임과 피벗테이블 (0) | 2023.07.03 |
판다스 데이터프레임 MultiIndex (0) | 2023.07.02 |