파이썬/파이썬 심화

[파이썬 심화] 5-1. Pandas 정의와 시리즈 클래스

  • -
반응형
  • 팬더스(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
'''
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 구독, 공감 부탁드립니다.