개요
2022.12.05 - [Python] Pandas - Series 1에 이어서 Series 클래스를 마저 정리한다.
시리즈와 딕셔너리 자료형
Series 객체는 인덱스 라벨을 통해 인덱싱할 수 있으므로 인덱스 라벨을 키로 하는 딕셔너리와 같다고 할 수 있다. 때문에 딕셔너리가 제공하는 in 연산도 가능하고 items 메서드를 이용해 키, 값을 접근할 수도 있다.
in 연산
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
'부산' in s, '경기' in s
# 실행 결과
(True, False)
items()
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
for k, v in s.items():
print(k, v)
# 실행 결과
서울 9904312
부산 3448737
인천 2890451
대구 2466052
Dictionary -> Series
Series 객체를 딕셔너리처럼 취급할 수 있듯이 딕셔너리로 Series를 만들 수도 있다.
d = {"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158}
df = pd.Series(d)
df
# 실행 결과
서울 9631482
부산 3393191
인천 2632035
대전 1490158
dtype: int64
딕셔너리 데이터는 순서가 없기 때문에 Series 데이터도 순서가 보장되지 않는다. 만약 순서를 지정하고 싶다면 인덱스를 지정해야 한다.
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158},
index=["부산", "서울", "인천", "대전"])
인덱스 기반 연산
s가 2015년 인구수, s2가 2010년 인구 수라고 했을 때 증가한 인구의 수를 계산해보자. 두 Series의 차이를 구하는 것이며, 두 Series에 대해 연산하는 경우 인덱스가 같은 데이터 대해 계산이 이루어진다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158})
s - s2
# 실행 결과
대구 NaN
대전 NaN
부산 55546.0
서울 272830.0
인천 258416.0
dtype: float64
대구나 대전의 경우 2010년, 2015년 데이터 모두 존재하지 않은 상태이므로 계산이 불가능하다. 따라서 NaN이라는 값을 값을 가진다. 또한 NaN은 float 자료형에서만 존재하기 때문에 연산 결과의 데이터가 float으로 처리되었다. 만약 NaN이 아닌 데이터만 구하고 싶다면 notnull 함수를 사용할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158})
ds = s - s2
(ds).notnull()
ds[ds.notnull()]
# 실행 결과
대구 False
대전 False
부산 True
서울 True
인천 True
dtype: bool
부산 55546.0
서울 272830.0
인천 258416.0
dtype: float64
데이터의 갱신, 추가, 삭제
인덱싱을 이용하면 딕셔너리처럼 데이터를 갱신하거나 추가할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s['부산'] = 200000
s['대전'] = 200000
s
# 실행 결과
서울 9904312
부산 200000
인천 2890451
대구 2466052
대전 200000
dtype: int64
데이터 삭제도 딕셔너리와 동일하게 del 명령어로 삭제할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
del s['서울']
s
# 실행 결과
부산 3448737
인천 2890451
대구 2466052
dtype: int64
참고 문서