본문 바로가기
Python Library/Pandas

[Pandas] 시리즈 (Series) (1)

by goatlab 2022. 2. 15.
728x90
반응형
SMALL

시리즈

 

시리즈 (Series) 클래스는 numpy에서 제공하는 1차원 배열과 비슷하지만 각 데이터의 의미를 표시하는 인덱스 (index)를 붙일 수 있다. 데이터 자체는 값 (value)라고 한다.

 

시리즈 = 값 (value) + 인덱스 (index)

 

시리즈 생성

 

데이터를 리스트나 1차원 배열 형식으로 Series 클래스 생성자에 넣어주면 시리즈 클래스 객체를 만들 수 있다. 이 때 인덱스의 길이는 데이터의 길이와 같아야 한다. 다음 예에서 이 “서울”, “부산” 등의 문자열이 인덱스의 값이다. 인덱스의 값을 인덱스 라벨 (label)이라고도 한다. 인덱스 라벨은 문자열 뿐 아니라 날짜, 시간, 정수 등도 가능하다.

 

s = pd.Series([9904312, 3448737, 2890451, 2466052],
              index=["서울", "부산", "인천", "대구"])
---              
서울    9904312
부산    3448737
인천    2890451
대구    2466052
dtype: int64

 

시리즈의 인덱스는 index 속성으로 접근할 수 있다. 시리즈의 값은 1차원 배열이며 values 속성으로 접근할 수 있다.

 

s.index
--> Index(['서울', '부산', '인천', '대구'], dtype='object')

s.values
--> array([9904312, 3448737, 2890451, 2466052])

 

name 속성을 이용하여 시리즈 데이터에 이름을 붙일 수 있다. index.name 속성으로 시리즈의 인덱스에도 이름을 붙일 수 있다.

 

s.name = "인구"
s.index.name = "도시"
s
---
도시
서울    9904312
부산    3448737
인천    2890451
대구    2466052
Name: 인구, dtype: int64

 

시리즈 연산

 

numpy 배열처럼 시리즈도 벡터화 연산을 할 수 있다. 다만 연산은 시리즈의 값에만 적용되며 인덱스 값은 변하지 않는다. 예를 들어 인구 숫자를 백만 단위로 만들기 위해 시리즈 객체를 1,000,000 으로 나누어도 인덱스 label에는 영향을 미치지 않는 것을 볼 수 있다.

 

s / 1000000
---
도시
서울    9.904312
부산    3.448737
인천    2.890451
대구    2.466052
Name: 인구, dtype: float64

 

시리즈 인덱싱

 

시리즈는 numpy 배열에서 가능한 인덱스 방법 이외에도 인덱스 label을 이용한 인덱싱도 할 수 있다. 배열 인덱싱이나 인덱스 label을 이용한 슬라이싱 (slicing)도 가능하다.

 

s[1], s["부산"]
--> (3448737, 3448737)

s[3], s["대구"]
--> (2466052, 2466052)

 

배열 인덱싱을 하면 부분적인 값을 가지는 시리즈 자료형을 반환한다. 자료의 순서를 바꾸거나 특정한 자료만 선택할 수 있다.

 

s[[0, 3, 1]]
---
도시
서울    9904312
대구    2466052
부산    3448737
Name: 인구, dtype: int64

s[["서울", "대구", "부산"]]
---
도시
서울    9904312
대구    2466052
부산    3448737
Name: 인구, dtype: int64

s[(250e4 < s) & (s < 500e4)]  # 인구가 250만 초과, 500만 미만인 경우
---
도시
부산    3448737
인천    2890451
Name: 인구, dtype: int64

 

슬라이싱을 해도 부분적인 시리즈를 반환한다. 이 때 문자열 라벨을 이용한 슬라이싱을 하는 경우에는 숫자 인덱싱과 달리 콜론(:) 기호 뒤에 오는 값도 결과에 포함되므로 주의해야 한다.

 

s[1:3]  # 두번째(1)부터 세번째(2)까지 (네번째(3) 미포함)
---
도시
부산    3448737
인천    2890451
Name: 인구, dtype: int64

s["부산":"대구"]  # 부산에서 대구까지 (대구도 포함)
---
도시
부산    3448737
인천    2890451
대구    2466052
Name: 인구, dtype: int64

 

만약 라벨 값이 영문 문자열인 경우에는 인덱스 라벨이 속성인것처럼 점(.)을 이용하여 해당 인덱스 값에 접근할 수도 있다.

 

s0 = pd.Series(range(3), index=["a", "b", "c"])
---
s0
a    0
b    1
c    2
dtype: int64

s0.a
--> 0

s0.b
--> 1

 

https://datascienceschool.net/01%20python/04.01%20%ED%8C%90%EB%8B%A4%EC%8A%A4%20%ED%8C%A8%ED%82%A4%EC%A7%80%EC%9D%98%20%EC%86%8C%EA%B0%9C.html

 

4.1 판다스 패키지의 소개 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

 

728x90
반응형
LIST

'Python Library > Pandas' 카테고리의 다른 글

[Pandas] 데이터프레임 고급 인덱싱  (0) 2022.02.15
[Pandas] 데이터 입출력  (0) 2022.02.15
[Pandas] 데이터프레임 (DataFrame)  (0) 2022.02.15
[Pandas] 시리즈 (Series) (2)  (0) 2022.02.15
판다스 (Pandas)  (0) 2022.02.15