본문 바로가기
Python/Pandas

Series의 생성, 설명, 소개, 옵션 - pandas(2)

by 콩돌 2019. 10. 6.
반응형

파이썬 버전 3.7 기준

pandas 버전 0.25.1 기준


 Series의 설명과 생성법


본 포스팅에서는 pandas에서의 Series에 대한 소개, 설명, 특징과 작성법에 대해서 다룬다.


Series와 DataFrame에 관련된 내용을 다루는 포스팅은 다음과 같으므로 필요하면 참고하자.



 Pandas에서 Series란?


Series는 어떤 데이터 타입이든 보유할 수 있는 레이블(label)링된 1차원 배열이다.  

  ○ 정수, 문자열, float, 파이썬 객체, 기타 등등을 포함한다.

  ○ 인덱스는 시계열(Time series)도 포함할 수 있다.

   Series는 축 레이블을 사용하는 일차원 ndarray으로 여겨도 무방하다.


 Series의 특징

Series에서 레이블(label)은 반드시 필요한 것은 아니지만 해시가 가능하여야(hashable) 한다. 

Series는 정수(interger) 그리고 레이블(label)을 기반으로하는 인덱싱을 지원한다.

Series에는 인덱스를 포함한 연산을 지원하기 위해 다양한 메서드(method)를 지원한다.

ndarray에 존재하는 통계 메서드를 사용시 자동적으로 누락된 데이터(missing data, nan)를 제외한다.

Series의 축 레이블은 인덱스와 같이 묶여서 참조될 수 있다.



 Series간의 연산

Series간에 연산(+, -, /, * 등)은 데이터의 인덱스 값을 기반으로 하여 값을 정렬한 뒤에 수행된다. 

  ○ 연산이 수행되는 각 Series는 같은 길이를 가질 필요는 없다.

  ○ 같은 길이가 아닐 경우 연산 후 결과물로 작성되는 Series는 인덱스는 연산을 수행한 두 인덱스의 합집합으로 조합된다.

    - 이 경우 양쪽 다 해당 인덱스가 있는 경우가 아니라면 값은 누락데이터(nan)으로 입력된다.


Series 간의 연산 예)

# pandas의 import

In[2]: import pandas as pd

...

# Series 간의 연산 수행

In[21]: A = pd.Series([1,2,3], index=['a','b','c'])

In[22]: B = pd.Series([4,5,6], index=['c','b','d'])

In[23]: A-B

Out[23]: 

a    NaN

b   -3.0

c   -1.0

d    NaN

dtype: float64


※ 주의사항

  Series나 DataFrame을 불러올때 대소문자가 구분된다. 

  즉, Series를 사용할 시 맨 앞에 S는 반드시 대문자 S를 사용하여야 한다.

  DataFrame을 사용 시에는 D와 F는 반드시 대문자 D와 F를 사용하여야 한다.



 Series 작성법



 Series의 단순한 생성법

Series 생성은 다음과 같은 구문을 사용하여 수행될 수 있다.

data에 입력되는 변수가 어떤 자료형을 가지느냐에 따라 Series() 함수의 결과는 달라지게 되므로 주의하자.

세부 입력 사항은 본 포스팅의 아랫 부분을 참고 할 수 있다.


Series 생성을 위한 단순한 구문 형식)

Series = pandas.Series(data, index=index)


data

여기서 data는 여러가지 자료형을 포함할 수 있다.

  ○ 딕셔너리(Dictionary, dict)

  ○ ndarray

  ○ 스칼라(Scalar) 값


index

입력된 인덱스(index)는 축 레이블의 리스트를 입력받는다. 



 data에 딕셔너리를 입력받을 경우

Series는 딕셔너리로부터도 생성될 수 있다.

아래 예제는 딕셔너리로부터 Series 생성하는 것을 보여준다.


딕셔너리 기반 Series 생성 예)

# pandas의 import

In[2]: import pandas as pd

...

# 딕셔너리를 사용한 Series 사용

In[3]: A_dict = {'c': 1, 'b': 2, 'a': 50}

In[4]: A_Series = pd.Series(A_dict)

In[5]: A_Series

Out[5]: 

c     1

b     2

a    50

dtype: int64



참고사항 

  출력되는 Series의 인덱스 순서에 대한 거동은 파이썬 버전과 pandas의 버전에 따라 다르다. 

  파이썬 버전이 3.6이상이고 pandas 버전이 0.23이상인 경우 (둘 다 해당하여야 하는 and 조건이다.)

    ○ 인덱스가 따로 입력되지 않는다면, Series의 인덱스는 딕셔너리의 삽입순서에 의해 정렬된다. 

  파이썬 버전이 3.6미만이거나 pandas 버전이 0.23미만인 경우 (둘 중 하나만 해당되도 적용되는 or 조건이다.)

    ○ Series 인덱스는 딕셔너리 키의 알파벳순으로 정렬된다. 


위의 예제에서, 사용자가 파이썬 버전이 3.6미만이거나, pandas버전이 0.23미만인 경우에는 Series는 딕셔너리 키의 알파벳 순으로 순서가 자동으로 정렬된다.


index가 입력될 경우에는, 딕셔너리의 키(key)와 index에 입력된 레이블간에 동일하게 매칭시켜 각 레이블에 값을 채운다. 

  ○ Series의 순서는 index에 입력된 객체의 순서를 따른다.

  ○ index에 입력된 레이블 중 딕셔너리 키에 매칭되는 값이 없다면 해당 레이블에는 NaN값을 채운다. 


딕셔너리 기반 Series 생성 예)

# pandas의 import

In[2]: import pandas as pd

...

딕셔너리와 인덱스를 사용한 Series 사용

In[6]: A_Series_with_index = pd.Series(A_dict, index=['b', 'c', 'a', 'aa'])

In[7]: A_Series_with_index

Out[7]: 

b      2.0

c      1.0

a     50.0

aa     NaN

dtype: float64



참고사항 

  NaN은 데이터가 누락될 때 기본적으로 사용되는 누락데이터표시이다.



 data에 ndarray를 입력받을 경우

data가 ndarray일 경우 인덱스는 반드시 data와 같은 길이어야 한다.

  ○ 인덱스가 입력되지 않는다면, 자동으로 [0, 1, 2, ... ,len(data)-1] 값을 인덱스로 사용한다.


ndarray 기반 Series 생성 예)

# pandas의 import

In[2]: import pandas as pd

In[12]: import numpy as np

...

# ndarray를 사용한 Series생성

In[13]: B_ndarray = pd.Series(np.random.randn(4))

In[14]: B_ndarray

Out[14]: 

0    0.284804

1   -0.840646

2    1.973867

3    0.292424

dtype: float64


ndarray와 인덱스를 사용한 Series생성

In[15]: B_ndarray_with_index = pd.Series(np.random.randn(4), index=['a', 'b', 'c', 'd'])

In[16]: B_ndarray_with_index

Out[16]: 

a   -1.089764

b    0.490710

c   -1.625268

d   -0.015015

dtype: float64



참고사항 

  pandas는 고유하지 않은 인덱스를 지원한다. 

    ○ 중복 인덱스를 지원하지 않는 연산이 수행된다면, 예외가 발생한다.

  느려지는 이유는 거의 모든 성능에 따른다.

  (계산 중에는 인덱스가 사용되지 않는 곳에서 GroupBy의 일부와 같이 많은 인스턴스가 존재한다.)



 data에 스칼라 값을 입력받을 경우

데이터가 스칼라 값일 경우에는 인덱스가 반드시 입력되어야한다.

각각의 인덱스에 이 스칼라값이 반복되어 입력된다.


스칼라 기반 Series 생성 예)

In[19]: C_scalar = pd.Series(10, index=['a', 'b', 'c'])

In[20]: C_scalar

Out[20]: 

a    10

b    10

c    10

dtype: int64



 Series의 세부 입력 사항


Series는 축 레이블을 사용하는 일차원 ndarray이다.

   시계열 역시 포함된다.


 Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)


data: array-like, iterable, dict, 혹은 scalar value

Series 내부에 정렬된 데이터를 입력받는다.

만약 데이터가 딕셔너리인 경우, Python 3.6 혹은 그 이후 버전에서는 입력된 딕셔너리 내부 데이터의 순서가 유지된다.



index: array-like or index (1d)

값들은 반드시 해시가 가능하여야하고(hashable) 반드시 data와 같은 길이를 가져야한다.

인덱스는 다수의 값을 사용하는 것이 허용된다.

index가 입력되지 않을 경우 기본 값은 Rangeindex(0, 1, 2, 3, 4, ...)이다. 

만약 dict과 index가 동시에 입력될 경우 이 인덱스 값이 dict의 keys값을 덮어쓴다.


dtype: str, numpy.dtype, or ExtensionDtype, 

선택적으로 입력 가능하다. 

Series에 입력될 자료형을 의미한다. 만약 명시하지 않을 경우 data 값의 자료형을 참고하여 자동으로 입력한다.

상세사항은 user guide을 참고할 수 있다. 



copy: bool

입력되는 data를 복사할지 여부를 결정한다.



 

 

 

 

 참고자료

  https://pandas.pydata.org/pandas-docs/version/0.25/getting_started/10min.html

  https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html

  https://pandas.pydata.org/pandas-docs/version/0.25/reference/api/pandas.Series.html

 

 

 

 



반응형

댓글