1. pandas - Series data
1. Series란
Series란 pandas의 기본 객체 중 하나로 numpy의 ndarray를 기반으로 인덱싱 기능을 추가하여 1차원의 배열을 나타낸다.
index를 지정하지 않을 시, 기본적으로 ndarray와 같이 0-based 인덱스를 생성하고, 지정할 경우 명시적으로 지정된 Index를 사용한다.
import numpy as np
import pandas as pd
- data만 사용한 Series 생성
우선 Series를 data로만 생성해보자.
# <in>
s1 = pd.Series([1, 2, 3]) # series의 value가 1, 2, 3
s1
# <out>
0 1
1 2
2 3
dtype: int64
Series의 index가 default로 0부터 자동 생성되는 것을 확인할 수 있다.
이번엔 Series value에 정수가 아닌 문자를 넣어보자
# <in>
s2 = pd.Series(['a', 'b', 'c'])
s2
# <out>
0 a
1 b
2 c
dtype: object
value에 문자값이 잘 들어갔음을 확인할 수 있다.
여기서 중요한 부분은 Series함수를 사용할 때 return값에 index, value값 외에 dtype값도 반환해준다는 점인데, data를 명시하지 않을 경우 pandas가 data type을 유추하여 반환한다는 사실이다.
Series 안에 numpy 모듈을 사용해서 value값에 넣어보자.
# <in>
s3 = pd.Series(np.arange(10))
s3
# <out>
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
# <in>
s4 = pd.Series(np.random.rand(10))
s4
# <out>
0 0.727262
1 0.825217
2 0.215028
3 0.901810
4 0.619124
5 0.877655
6 0.406386
7 0.653558
8 0.684527
9 0.992682
dtype: float64
- data와 index를 사용한 Series 생성
data와 index값을 함께 명시하여 Series를 만들어보자.
# <in>
s5 = pd.Series([1, 2, 3],[100, 200, 300]) # value, index
s5
# <out>
100 1
200 2
300 3
dtype: int64
첫 번째에 value가 들어가고 두 번째에 index가 들어간다는 것을 확인할 수 있다.
index를 꼭 숫자로 고집할 필요도 없다. index에 문자를 입력해 Series를 만들어보자.
# <in>
s6 = pd.Series([1, 2, 3],['a', 'm', 'k'])
s6
# <out>
a 1
m 2
k 3
dtype: int64
index에 문자가 잘 들어갔고, dtype은 value의 dtype인 int로 유추되는 것을 확인할 수 있다.
- Series에 dtype 명시하기
이번엔 data, index, dtype을 함께 명시하자. pandas Series에서 dtype을 명시하지 않으면 pandas가 data의 dtype을 유추하지만 명시한다면 명시된 dtype으로 data를 취급한다.
# <in>
s7 = pd.Series(np.arange(5), np.arange(100,105), dtype = np.int16)
s7
# <out>
100 0
101 1
102 2
103 3
104 4
dtype: int16
data의 dtype을 int16으로 잘 반환했다.
- Series(.index, .value, .items)
.index, .value, .items를 사용해서 Series의 index, value, items를 반환 받을 수 있다.
# <in>
print(s6)
print(s6.index)
print(s6.values)
print(s6.items)
# <out>
a 1
m 2
k 3
dtype: int64
Index(['a', 'm', 'k'], dtype='object')
[1 2 3]
<bound method Series.items of a 1
m 2
k 3
dtype: int64>
- Series index access & update
Python list에서 처럼 index를 통해 data에 access도 가능하다.
# <in>
print(s6)
print(s6[104])
# <out>
100 0
101 1
102 2
103 3
104 4
dtype: int16
4
역시 index를 통해 data update도 가능하다.
# <in>
print(s7)
s7[100] = 70
s7[999] = 100
print(s7)
# <out>
100 0 # update 전 s7
101 1
102 2
103 3
104 4
dtype: int16
100 70 # updata 후 s7
101 1
102 2
103 3
104 4
999 100
dtype: int16
다른 Series의 index를 재사용하는 것도 가능하다.
# <in>
s6 = pd.Series(np.arange(6),np.arange(100,106))
s7 = pd.Series(np.arange(6), s6.index)
# <out>
100 0
101 1
102 2
103 3
104 4
105 5
dtype: int64