시리즈(Series)는 판다스(Pandas) 라이브러리의 데이터 구조 중 하나입니다. 시리즈(Series)는 축 라벨(시계열 포함)이 있는 1차원 ndarray입니다. 라벨은 유니크할 필요는 없지만 해시 가능한 유형이어야 합니다. 객체는 정수 및 레이블 기반 인덱싱을 모두 지원하고 인덱스와 관련된 작업을 수행하기 위한 다양한 메서드를 제공합니다. 누락된 데이터(현재 NaN으로 표시됨)를 자동으로 제외하도록 ndarray의 통계 방법이 재정의 되었습니다.
시리즈간의 연산(+, -, /, *, **) 작업은 연결된 인덱스 값을 기준으로 값을 정렬합니다. 길이가 같을 필요는 없습니다. 결과 인덱스는 두 인덱스의 정렬된 합집합이 됩니다.
판다스(Pandas) 시리즈(Series) 이해하기
판다스 라이브러리의 시리즈는 아래와 같은 구조입니다.
pandas.Series(data=None, index=None, dtype=None, name=None, copy=None, fastpath=False)
시리즈의 주요 인수(Parameter)에 대해서 설명하겠습니다.
data : array-like, Iterable, dict, or scalar value
- Series에 저장된 데이터를 포함합니다. 데이터가 딕셔너리 구조인 경우 인수 순서가 유지됩니다.
index : array-like or Index (1d)
- 값은 해시 가능해야 하며 데이터와 길이가 같아야 합니다. 고유(unique)하지 않은 인덱스 값을 사용할 수 있습니다. 만약, 인덱스 값을 제공하지 않으면 RangeIndex(0, 1, 2, …, n)로 기본값을 가집니다. 데이터가 딕셔너리이고 인덱스가 None이면 데이터의 키를 인덱스로 사용합니다. 인덱스가 None이 아닌 경우 결과 시리즈는 인덱스 값으로 다시 인덱싱 됩니다.
dtype : str, numpy.dtype, or ExtensionDtype, optional
- 결과 시리즈의 데이터 유형을 나타냅니다. 지정하지 않으면 데이터를 탐색하여 자동 부여합니다.
name : Hashable, default None
- 시리즈에 부여할 이름을 나타냅니다.
copy : bool, default False
- 입력 데이터를 복사합니다. 시리즈 또는 1차원 ndarray 입력에만 영향을 미칩니다.
판다스(Pandas) 시리즈(Series) 데이터 생성 예시
인덱스가 지정된 딕셔너리로부터 시리즈 생성하기
import pandas as pd
tempData = {'a': 1, 'b': 2, 'c': 3}
tempSeries = pd.Series(data = tempData, index=['a', 'b', 'c'])
tempSeries
---------------------------------------------------------------
a 1
b 2
c 3
dtype: int64
딕셔너리의 키는 인덱스 값과 일치하므로 인덱스 값에는 영향을 주지 않습니다.
tempData1 = {'a': 1, 'b': 2, 'c': 3}
tempSeries1 = pd.Series(data = tempData1, index=['x', 'y', 'z'])
tempSeries1
---------------------------------------------------------------
x NaN
y NaN
z NaN
dtype: float64
x, y, z를 인덱스로 가지는 값을 정의하지 않아, NaN 값을 출력합니다. 인덱스는 먼저 딕셔너리의 키로 빌드된 후에, Series는 주어진 인덱스 값으로 재인덱싱되어 결과적으로 모든 NaN 값을 가지게 되었습니다.
copy = False로 리스트에서 시리즈 생성하기
tempData2 = [1, 2]
tempSeries2 = pd.Series(tempData2, copy = False)
tempSeries2.iloc[0] = 999
tempData2
-----------------------------
[1, 2]
tempSeries2
-----------------------------
0 999
1 2
dtype: int64
입력 데이터 유형으로 인해 시리즈는 copy=False인 경우에도 원본 데이터의 복사본을 가지므로 데이터를 변경하지 않습니다.
import numpy as np
tempData3 = np.array([1, 2])
tempSeries3 = pd.Series(tempData3, copy = False)
tempSeries3.iloc[0] = 999
tempData3
---------------------------
array([999, 2])
tempSeries3
---------------------------
0 999
1 2
dtype: int32
입력 데이터 유형으로 인해 시리즈는 원본 데이터에 대한 보기를 가지므로 데이터도 변경됩니다.
이상으로 데이터 구조의 기본인 시리즈에 대해서 알아 보았습니다. 시리즈는 데이터를 분석하기 위한 기본 데이터 구조이므로 잘 이해하는 것이 필요합니다.