728x90
반응형
SMALL
시리즈와 딕셔너리 자료형
시리즈 객체는 label 값에 의해 인덱싱이 가능하므로 실질적으로 인덱스 라벨 값을 키 (key)로 가지는 딕셔너리 자료형과 같다고 볼 수 있다. 따라서 딕셔너리 자료형에서 제공하는 in 연산도 가능하고 items 메서드를 사용하면 for 루프를 통해 각 원소의 키 (key)와 값 (value)을 접근할 수도 있다.
"서울" in s # 인덱스 라벨 중에 서울이 있는가
--> True
"대전" in s # 인덱스 라벨 중에 대전이 있는가
--> False
for k, v in s.items():
print("%s = %d" % (k, v))
---
서울 = 9904312
부산 = 3448737
인천 = 2890451
대구 = 2466052
딕셔너리 객체에서 시리즈를 만들 수도 있다.
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158})
s2
---
서울 9631482
부산 3393191
인천 2632035
대전 1490158
dtype: int64
딕셔너리의 원소는 순서를 가지지 않으므로 시리즈의 데이터도 순서가 보장되지 않는다. 만약 순서를 정하고 싶다면 인덱스를 리스트로 지정해야 한다.
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158},
index=["부산", "서울", "인천", "대전"])
s2
---
부산 3393191
서울 9631482
인천 2632035
대전 1490158
dtype: int64
인덱스 기반 연산
ds = s - s2
ds
---
대구 NaN
대전 NaN
부산 55546.0
서울 272830.0
인천 258416.0
dtype: float64
s.values - s2.values
--> array([ 6511121, -6182745, 258416, 975894])
대구와 대전의 경우에는 2010년 자료와 2015년 자료가 모두 존재하지 않기 때문에 계산이 불가능하므로 NaN (Not a Number)이라는 값을 가지게 된다. 또한 NaN 값이 float 자료형에서만 가능하므로 다른 계산 결과도 모두 float 자료형이 되었다는 점에 주의한다. NaN이 아닌 값을 구하려면 notnull 메서드를 사용한다.
ds.notnull()
---
대구 False
대전 False
부산 True
서울 True
인천 True
dtype: bool
ds[ds.notnull()]
---
부산 55546.0
서울 272830.0
인천 258416.0
dtype: float64
rs = (s - s2) / s2 * 100
rs = rs[rs.notnull()]
rs
---
부산 1.636984
서울 2.832690
인천 9.818107
dtype: float64
데이터의 갱신, 추가, 삭제
인덱싱을 이용하면 딕셔너리처럼 데이터를 갱신 (update)하거나 추가 (add)할 수 있다.
rs["부산"] = 1.63
rs
---
부산 1.630000
서울 2.832690
인천 9.818107
dtype: float64
rs["대구"] = 1.41
rs
---
부산 1.630000
서울 2.832690
인천 9.818107
대구 1.410000
dtype: float64
데이터를 삭제할 때도 딕셔너리처럼 del 명령을 사용한다.
del rs["서울"]
rs
---
부산 1.630000
인천 9.818107
대구 1.410000
dtype: float64
728x90
반응형
LIST
'Python Library > Pandas' 카테고리의 다른 글
[Pandas] 데이터프레임 고급 인덱싱 (0) | 2022.02.15 |
---|---|
[Pandas] 데이터 입출력 (0) | 2022.02.15 |
[Pandas] 데이터프레임 (DataFrame) (0) | 2022.02.15 |
[Pandas] 시리즈 (Series) (1) (0) | 2022.02.15 |
판다스 (Pandas) (0) | 2022.02.15 |