python/pandas

1. pandas - Series data

Abokadoh 2023. 2. 17. 14:59

1. Series

Seriespandas의 기본 객체 중 하나로 numpy의 ndarray를 기반으로 인덱싱 기능을 추가하여 1차원의 배열을 나타낸다.

 

index를 지정하지 않을 시, 기본적으로 ndarray와 같이 0-based 인덱스를 생성하고, 지정할 경우 명시적으로 지정된 Index를 사용한다.

import numpy as np
import pandas as pd

- data만 사용한 Series 생성

 

우선 Seriesdata로만 생성해보자.

# <in>
s1 = pd.Series([1, 2, 3]) # series의 value가 1, 2, 3
s1


# <out>
0    1
1    2
2    3
dtype: int64

Seriesindexdefault0부터 자동 생성되는 것을 확인할 수 있다.

 

 

 

이번엔 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 생성

 

dataindex값을 함께 명시하여 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