Python/NumPy | Pandas

[Python] Pandas - Series 2

비번변경 2022. 12. 6. 22:51

개요

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

 

 

참고 문서

데이터 사이언스 스쿨 - 4.1 판다스 패키지의 소개