데이터 분석중에 시리즈에 대해서 간략히 정리해 보겠습니다.
참고도서 [금융 데이터 분석을 위한 파이썬 판다스]
인덱스 추출
# 인덱스 추출
data = [1000, 2000, 3000]
s = Series(data)
print(s.index)
print(s.index.to_list())
------------------------------
RangeIndex(start=0, stop=3, step=1)
[0, 1, 2]
인덱스 변경
from pandas import Series
import numpy as np
# 인덱스 변경
data = [1000, 2000, 3000]
s = Series(data)
print(s.index)
print(s.index.to_list())
print(s)
print()
s.index = ["메로나", "구구콘", "하겐다즈"]
print(s.index)
print(s.index.to_list())
print(s)
print()
s.index = np.array(["메로나A", "구구콘B", "하겐다즈C"])
print(s.index)
print(s.index.to_list())
print(s)
----------------------------------------------------------------
RangeIndex(start=0, stop=3, step=1)
[0, 1, 2]
0 1000
1 2000
2 3000
dtype: int64
Index(['메로나', '구구콘', '하겐다즈'], dtype='object')
['메로나', '구구콘', '하겐다즈']
메로나 1000
구구콘 2000
하겐다즈 3000
dtype: int64
Index(['메로나A', '구구콘B', '하겐다즈C'], dtype='object')
['메로나A', '구구콘B', '하겐다즈C']
메로나A 1000
구구콘B 2000
하겐다즈C 3000
dtype: int64
시리즈 인스턴스 생성 방법(data=None, index=None, ...)
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
print(s)
---------------------------------------
메로나 1000
구구콘 2000
하겐다즈 3000
dtype: int64
reindex 를 이용한 인덱스 변경 - 기존 인덱스와 같은 이름이면 값을 가져오고 새로운 인덱스는 NaN 으로 값을 채운다.
data = [1000, 2000, 3000]
index = ['메로나', '구구콘', '하겐다즈']
s = Series(data=data, index=index)
s2 = s.reindex(["메로나", "비비빅", "구구콘", '하겐다'])
print(s2)
--------------------------------------------------------
메로나 1000.0
비비빅 NaN
구구콘 2000.0
하겐다 NaN
dtype: float64
여기서 NaN , 결측치를 '0' 으로 채우고 싶다면, fillna 함수를 사용한다.
print(s2.fillna(0))
-------------------------
메로나 1000.0
비비빅 0.0
구구콘 2000.0
하겐다 0.0
dtype: float64
또는 fill_value 옵션을 이용해서 처리 가능하다.
print(s.reindex(["메로나", "비비빅", "구구콘", '하겐다'], fill_value=0))
--------------------------------------------------------------------
메로나 1000
비비빅 0
구구콘 2000
하겐다 0
dtype: int64
딕셔너리를 이용한 시리즈 데이터 만들기
# 리스트를 이용한 시리즈 만들기
price = [42500, 42550, 41800, 42550, 42650]
date = ["2019-05-31", "2019-05-30", "2019-05-29", "2019-05-28", "2019-05-27"]
s = Series(price, date)
print(s)
# 딕셔너리를 이용한 시리즈 만들기
data = {
"2019-05-31" : 42500,
"2019-05-30" : 42550,
"2019-05-29" : 41800,
"2019-05-28" : 42550,
"2019-05-27" : 42650
}
s = Series(data)
print(s)
--------------------------------------------------------
2019-05-31 42500
2019-05-30 42550
2019-05-29 41800
2019-05-28 42550
2019-05-27 42650
dtype: int64
print(s.index)
print(s.index.dtype)
---------------------------------------------
Index(['2019-05-31', '2019-05-30', '2019-05-29', '2019-05-28', '2019-05-27'], dtype='object')
object
print(s.values)
print(s.values.dtype)
---------------------------------------------
[42500 42550 41800 42550 42650]
int64
인덱싱 - 시리즈 데이터 접근
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
print(s)
print(s.iloc[0]) # 첫데이터 접근
print(s.iloc[-1]) # 마지막 데이터 접근
print(s.loc['메로나']) # 인덱스 정보로 접근
print(s[0]) # 내부적으로 loc 메서드 호출
-------------------------------------------------------
메로나 1000
구구콘 2000
하겐다즈 3000
dtype: int64
1000
3000
1000
1000
인덱싱 - 시리즈 데이터 접근시 주의할 점.
s1 = Series([10, 20, 30])
s2 = Series([10, 20, 30], index=[1, 2, 3])
print(s1[0])
# print(s2[0]) # 에러, 인덱스를 1부터 설정했기 때문임.
인덱싱 - 예외 사항)
s3 = Series([10, 20, 30], index=['a', 'b', 'c'])
print(s3[0]) # 인덱스 타입이 정수가 아닌경우, [] 인덱싱은 iloc 처럼 동작함
print(s3['a'])
---------------------------------------------------------------
10
10
인덱싱 - 그외
print(s3.index[0])
print(s3.index[-1])
---------------------------------
a
c
슬라이싱
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
print(s.iloc[0:2])
print()
print(s.loc['메로나':'구구콘'])
print()
print(s.loc['메로나':'하겐다즈'])
---------------------------------------
메로나 1000
구구콘 2000
dtype: int64
메로나 1000
구구콘 2000
dtype: int64
메로나 1000
구구콘 2000
하겐다즈 3000
dtype: int64
리스트를 이용한 슬라이싱 - iloc, loc
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
indice = [0, 2]
print(s.iloc[ indice ])
print()
print(s.iloc[ [0, 2] ])
---------------------------------------
메로나 1000
하겐다즈 3000
dtype: int64
메로나 1000
하겐다즈 3000
dtype: int64
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
indice = ["메로나", "하겐다즈"]
print(s.loc[ indice ])
print()
print(s.loc[ ["메로나", "하겐다즈"] ])
-----------------------------------------
메로나 1000
하겐다즈 3000
dtype: int64
메로나 1000
하겐다즈 3000
dtype: int64
시리즈 수정/추가/삭제
수정
data = [1000, 2000, 3000]
index = ["메로나", "구구콘", "하겐다즈"]
s = Series(data=data, index=index)
# 아래 3가지 방법으로 수정 가능함
s.loc['메로나'] = 500 # 값 수정
s.iloc[0] = 500 # iloc 연산 사용
s['메로나'] = 500 # [ ] 기호 사용
print(s)
----------------------------------------
메로나 500
구구콘 2000
하겐다즈 3000
dtype: int64
추가
s.loc['비비빅'] = 500 # 값 추가
print(s)
----------------------------------------
메로나 500
구구콘 2000
하겐다즈 3000
비비빅 500
dtype: int64
삭제 - 인덱스로만 삭제 가능, 행번호를 넣어주면 오류 발생함,
그리고 원본 데이터를 직접 수정하는것이 아니고 시리즈 객체를 반환하므로 다른 변수에 바인딩해야 함.
s = s.drop('메로나')
print(s)
-------------------------------
구구콘 2000
하겐다즈 3000
비비빅 500
dtype: int64
시리즈 연산
시리즈는 넘파이와 동일하게 브로드캐스팅이 적용되어, 같은 인덱스끼리 연산을 수행한다.
철수 = Series([10, 20, 30], index=['NAVER', 'SKT', 'KT'])
영희 = Series([10, 30, 20], index=['SKT', 'KT', 'NAVER'])
가족 = 철수 + 영희
print(가족)
---------------------------------------------------------
KT 60
NAVER 30
SKT 30
dtype: int64
idxmax - 시리즈의 최대값의 인덱스를 반환한다
idxmin - 시리즈의 최소값의 인덱스를 반환한다
cumprod - 시리즈 누적값을 계산할 수 있다
data = {
"삼성전자": "전기,전자",
"LG전자": "전기,전자",
"현대차": "운수장비",
"NAVER": "서비스업",
"카카오": "서비스업"
}
s = Series(data)
print(s)
print(s.index.to_list())
print(list(s.values))
print(list(s.index))
-------------------------------------
삼성전자 전기,전자
LG전자 전기,전자
현대차 운수장비
NAVER 서비스업
카카오 서비스업
dtype: object
['삼성전자', 'LG전자', '현대차', 'NAVER', '카카오']
['전기,전자', '전기,전자', '운수장비', '서비스업', '서비스업']
['삼성전자', 'LG전자', '현대차', 'NAVER', '카카오']
print(s.unique())
print()
print(s.value_counts())
-------------------------------------
['전기,전자' '운수장비' '서비스업']
전기,전자 2
서비스업 2
운수장비 1
dtype: int64
'Python > Data analysis' 카테고리의 다른 글
[Python] Data Analysis - DataFrame - groupby (0) | 2023.04.04 |
---|---|
[Python] Data Analysis - DataFrame - sort, rank (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - Filter (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - Query (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame (0) | 2023.03.30 |