obj = pd.Series([0,1,2,3,4,5,6,7],
index = ['a','b','c','d','e','f','g','h'], dtype = 'int64')
# 결과
#a 0
#b 1
#c 2
#d 3
#e 4
#f 5
#g 6
#h 7
numpy를 사용하는 Pandas이기때문에 사용 가능
# 인덱싱
obj['b'], obj[3]
# 결과
# (1, 3)
# 슬라이싱
obj[1: 3], obj[obj < 3]
# 결과
#(b 1
#c 2
#dtype: int64,
#a 0
#b 1
#c 2
#dtype: int64)
multi index 접근
슬라이싱은 특정 범위를 가져오는 것이지만, 특정 인덱스에 대한 여러개를 들고 올 수 있다.
#multi index
obj[[1, 3 , 5]]
# 결과
#b 1
#d 3
#f 5
#dtype: int64
기존 list에서는 값 변경이 안되며, numpy는 가능하기에 특정 key를 기준으로 값을 변경할 수 있다.
멀티 인덱싱으로 수정이 가능하다.
# 범위 슬라이싱 수정
obj['d' : 'e'] = 100
# 결과
#a 0
#b 1
#c 2
#d 100
#e 100
#f 5
#g 6
#h 7
# 멀티 인덱싱
obj[['d', 'e']] = 50
# 결과
#a 0
#b 1
#c 2
#d 50
#e 50
#f 5
#g 6
#h 7
#dtype: int64
각각의 Key와 동일한 Series끼리 연산이 가능하다.
s1 = pd.Series([1,2,3,4], index['a', 'b', 'c', 'd'])
s2 = pd.Series([10,20,30,40], index['a', 'b', 'c', 'd'])
# 연산 가능
s1 + s2
# 결과
#a 11
#b 22
#c 33
#d 44
#dtype: int64
각각의 다른 Key를 가지고 있다면 포함이 되지 않는 값에 NaN을 넣어 계산한다.
s1 = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])
s2 = pd.Series([10, 20, 30, 40], index=['b', 'c', 'd','e'])
s1+s2 # SQL의 Outer join과 비슷한 방식
# 결과
#a NaN # s2에 'a' key가 없기에 계산을 할 수 없으니 NaN으로 계산된다.
#b 12.0
#c 23.0
#d 34.0
#e NaN
#dtype: float64
# NaN 처리
s1.add(s2, fill_value = 0) #연산이 되지 않는 곳에 0을 넣어 계산
# 서로 맞지 않는 Key끼리 계산할때 임의의 값 0을 넣어서 계산한다.
# 또한 내가 임의로 값을 넣는 것도 가능하다.
# 결과
#a 1.0
#b 12.0
#c 23.0
#d 34.0
#e 40.0
#dtype: float64
obj.unique()