- 팬더스(Pandas)란
- 경영, 경제학에서 주로 사용되는 패널 데이터(Panel Data)에서 유래
- R에서 사용되는 data.frame과 유사한 DataFrame 구조를 사용
- 주로 pd로 import (즉, import pandas as pd)
시리즈(Series) 클래스
- numpy의 배열과 비슷한 형태지만, 값마다 인덱스를 붙일 수 있음
- 즉, 시리즈 = 값(value) + 인덱스(index)
# 지역별 인구 데이터 ('23년 5월 기준, 1단위: 만 명)
import pandas as pd
s1 = pd.Series([1361,941,330,297]) # 인덱스를 안 붙였을 때
print(s1)
'''
0 1361
1 941
2 330
3 297
'''
s2 = pd.Series([1361,941,330,297], index = ['경기','서울','부산','경남']) # 인덱스를 붙였을 때
print(s2)
'''
경기 1361
서울 941
부산 330
경남 297
dtype: int64
'''
- values와 index로 값과 인덱스에 접근
s = pd.Series([1361,941,330,297], index = ['경기','서울','부산','경남'])
print(s.values) # [1361 941 330 297]
print(s.index) # Index(['경기', '서울', '부산', '경남'], dtype='object')
- 시리즈 데이터 자체와 인덱스에 이름을 붙일 수 있다.
s.name = '23년 5월 지역별 인구'
s.index.name = '지역'
print(s)
'''
지역
경기 1361
서울 941
부산 330
경남 297
Name: 23년 5월 지역별 인구, dtype: int64
'''
- 시리즈 값에 벡터화 연산을 할 수 있다. 단, 인덱스는 불변
print(s*10000)
'''
지역
경기 13610000
서울 9410000
부산 3300000
경남 2970000
Name: 23년 5월 지역별 인구, dtype: int64
'''
시리즈 인덱싱
print(s[[3,2,1,0]])
'''
지역
경남 297
부산 330
서울 941
경기 1361
Name: 23년 5월 지역별 인구, dtype: int64
'''
print(s[['서울','부산','경기']])
'''
지역
서울 941
부산 330
경기 1361
Name: 23년 5월 지역별 인구, dtype: int64
'''
# 시리즈.인덱스도 가능
p = pd.Series([17,9,3], index = ['a','b','c'])
print(p.a) # 17
print(s[s>900])
'''
지역
경기 1361
서울 941
Name: 23년 5월 지역별 인구, dtype: int64
'''
print(s[(s<400)|(s>1000)])
'''
지역
경기 1361
부산 330
경남 297
Name: 23년 5월 지역별 인구, dtype: int64
'''
시리즈 슬라이싱
s = pd.Series([1361,941,330,297], index = ['경기','서울','부산','경남'])
s['경기':'서울']
'''
경기 1361
서울 941
dtype: int64
'''
s[0:2]
'''
경기 1361
서울 941
dtype: int64
'''
시리즈와 딕셔너리
- 시리즈는 인덱스 라벨을 통해 인덱싱이 가능하다는 점에서 딕셔너리와 유사
print('서울' in s) # True
print('인천' in s) # False
for key, value in s.items():
print(key,value)
'''
경기 1361
서울 941
부산 330
경남 297
'''
#'12년 4월 지역별 인구 (경남 제외, 인천 추가)
s2=pd.Series({'경기':1198,'서울':1024,'부산':354,'인천':281})
print(s2)
'''
경기 1198
서울 1024
부산 354
인천 281
dtype: int64
'''
- '12년 4월과 '23년 5월 인구 비교 - 사칙연산 가능
a = s-s2
print(a)
'''
경기 163.0
경남 NaN # 비교할 대상이 없을땐 NaN
부산 -24.0
서울 -83.0
인천 NaN # 비교할 대상이 없을땐 NaN
dtype: float64
'''
print(s.values - s2.values)
# [163 -83 -24 16] - 위치로만 계산된다. 마지막 값 : 경남 - 인천
- NaN값 없애고 싶을 땐 notnull 메서드 사용
print(a.notnull())
'''
경기 True
경남 False
부산 True
서울 True
인천 False
dtype: bool
'''
print(a[a.notnull()])
'''
경기 163.0
부산 -24.0
서울 -83.0
dtype: float64
'''
ratio = (s-s2) / s2 * 100
print(ratio[ratio.notnull()])
'''
경기 13.606010
부산 -6.779661
서울 -8.105469
dtype: float64
'''
print(s2)
'''
경기 1198
서울 1024
부산 354
인천 281
dtype: int64
'''
s2['인천']=1
s2['경북']=269
print(s2)
'''
경기 1198
서울 1024
부산 354
인천 1
경북 269
dtype: int64
'''
del s2['인천']
print(s2)
'''
경기 1198
서울 1024
부산 354
경북 269
dtype: int64
'''