pandas

[ pandas ] 시리즈 Series

우언 2021. 8. 20. 12:50

pandas

import pandas as pd

 

- 빅데이터 연산의 기초

- 데이터 구조를 정의

- numpy와 같은 타 모듈과의 전환이 용이

- pd라고 alias를 정의해 빠르게 사용 다른 alias를 지정해도 사용에는 무방하나 pd로 칭하는게 암묵적인 룰

 

 

시리즈란

- 파이썬기본 데이터유형인 딕셔너리와 유사한형태

- index : value 형태로 이루어진 데이터 

- 집계연산의 편의, 인덱싱의 편의

- 시리즈를 결합하면 데이터프레임이됨

- 데이터프레임에서 그룹 연산시 산출물이 시리즈로 제공되기 때문에 알고있어야 도움

 

생성

series1 = pd.Series({'국어':100, '수학':90, '영어':80})
series2 = pd.Series([100,20,45,90,100,87,45], index = ['k','e','a','b','f','c','d'])
series3 = pd.Series([100,20,45,90,100,87,45])
print(series1)
print('-'*30)
print(series2)
print('-'*30)
print(series3)
국어    100
수학     90
영어     80
dtype: int64
------------------------------
k    100
e     20
a     45
b     90
f    100
c     87
d     45
dtype: int64
------------------------------
0    100
1     20
2     45
3     90
4    100
5     87
6     45
dtype: int64

value와 인덱스를 지정하여 생성가능 인덱스를 지정하지 않을시 0에서 시작하는 정수로 순서대로 임의의 인덱스 부여

딕셔너리와 유사한 형태이기때문에 딕셔너리로 생성도 가능

 

 

인덱싱과 슬라이싱

두가지 방법으로 가능 해당하는 인덱스로 / 위치로

 

print(series2)
print('-'*30)

# 인덱스로 인덱싱 혹은 슬라이싱
print(series2['k'])
print('-'*30)
print(series2['k':'a'])
print('-'*30)

# 위치로 
print(series2.iloc[1])
print('-'*30)
print(series2.iloc[:1])
k    100
e     20
a     45
b     90
f    100
c     87
d     45
dtype: int64
------------------------------
100
------------------------------
k    100
e     20
a     45
dtype: int64
------------------------------
20
------------------------------
k    100
dtype: int64

인덱싱시 해당하는 인덱스에 속한 밸류를 반환한다.

슬라이싱시 해당하는 범위의 시리즈를 반환한다.

 

iloc을 이용할시 위치에 따라 인덱싱과 슬라이싱이 가능하다 1번째 값은(파이썬은 0부터시작) 20이기에 20을 반환

iloc[:1] 은 1번째 전까지의 녀석을 시리즈로 반환한다.

 

series2[['a','b','d']]
a    45
b    90
d    45
dtype: int64

이렇게 원하는녀석들만 볼 수도있다.

 

불리언 인덱싱

print((90>=series2) & (series2>50))
print('-'*30)
print(series2.loc[(90>=series2) & (series2>50)])
k    False
e    False
a    False
b     True
f    False
c     True
d    False
dtype: bool
------------------------------
b    90
c    87
dtype: int64

시리즈의 밸류에 관하여 불리언 연산이 가능하고 

그 불리언의 트루에 해당하는값만을 슬라이싱 가능하다.

 

print(series2.loc[(series2.index > 'b').tolist()])
k    100
e     20
f    100
c     87
d     45
dtype: int64

이런식으로 한다면 인덱스의 불리언 연산도 가능하다.

따로 기능이있는지는 잘모르겠다

 

시리즈 정렬

print(series2.sort_values())
print('-'*30)
print(series2.sort_values(ascending = False))
e     20
a     45
d     45
c     87
b     90
k    100
f    100
dtype: int64
------------------------------
k    100
f    100
b     90
c     87
a     45
d     45
e     20
dtype: int64

시리즈의 값을 기준으로 정렬을 할 수 있다. ascending을 False로 설정하면 내림차순으로 정렬된다.

print(series2.sort_index())
print('-'*30)
print(series2.sort_index(ascending = False))
a     45
b     90
c     87
d     45
e     20
f    100
k    100
dtype: int64
------------------------------
k    100
f    100
e     20
d     45
c     87
b     90
a     45
dtype: int64

인덱스를 기준으로도 거의 동일하게 정렬이 가능하다.

 

갯수세기

series2.value_counts()
100    2
45     2
20     1
90     1
87     1
dtype: int64

밸류의 갯수세기도 가능하다

인덱스는 보통 유일한 값을 가지기때문에 인덱스에 대한 물음은 가지지않았다.

 

간단한 연산

print(series2.mean())
print(series2.max())
print(series2.min())
print(series2.median())
69.57142857142857
100
20
87.0