Pandas
특징1)부동 소수점이 아닌 데이터 뿐만 아니라 부동 소수점 데이터에서도 결측 데이터(NaN
으로 표시)를 쉽게 처리
2) 크기 변이성(Size mutuability)
: DataFrame
및 고차원 객체에서 열을 삽입 및 삭제 가능
3) 자동 및 명시적(explicit) 데이터 정렬 : 객체를 라벨 집합에 명시적으로 정렬하거나, 사용자가 라벨을 무시하고 Series
, DataFrame
등의 계산에서 자동으로 데이터 조정이 가능하다.
4) 데이터 세트에서 집계 및 변환을 위한 분할(split)
, 적용(apply)
, 결합(combine)
작업을 수행할 수 있는 강력하고 유연한 groupby
함수를 제공한다.
5) 누락된 데이터 또는 다른 python
및 Numpy
데이터 구조에서 서로 다른 인덱싱 데이터를 DataFrame 개체로 쉽게 변화
6) 대용량 데이터 세트의 지능형 라벨 기반 슬라이싱, 고급 인덱싱 및 부분 집합 구하기가 가능하다.
7) 직관적인 데이터 세트 병합 및 결합
8) 데이터 세트의 유연한 재구성 및 피벗
9) 축의 계층적 라벨링(눈금당 여러 개의 라벨을 가질 수 있다)
10) 플랫 파일(CSV
및 구분), Excel 파일, 데이터베이스 로딩 및 초고속 HDF5 형식의 데이터 저장/로드에 사용되는 강력한 IO 도구
11) 시계열 특정 기능 : 날짜 범위 생성 및 주파수 변환, 무빙 윈도우(moving window) 통계
, 날짜 이동 및 지연
import numpy as np import pandas as pd pd.__version__ #1.5.3
Series
객체s = pd.Series([0, 0.25, 0.5, 0.75, 1.0]) s # 0 0.00 # 1 0.25 # 2 0.50 # 3 0.75 # 4 1.00 # dtype: float64
s.values # array([0. , 0.25, 0.5 , 0.75, 1. ])
s.index # RangeIndex(start=0, stop=5, step=1)
s[1] # 0.25
s[1:4] # 1 0.25 # 2 0.50 # 3 0.75 # dtype: float64
s = pd.Series([0, 0.25, 0.5, 0.75, 1.0], index=['a', 'b', 'c', 'd', 'e']) s # a 0.00 # b 0.25 # c 0.50 # d 0.75 # e 1.00 # bdtype: float64
s['c'] # 0.5
s[['c', 'd', 'e']] # c 0.50 # d 0.75 # e 1.00 # dtype: float64
'b' in s # True
s = pd.Series([0, 0.25, 0.5, 0.75, 1.0], index = [2,4,6,8,10]) s # 2 0.00 # 4 0.25 # 6 0.50 # 8 0.75 # 10 1.00 # dtype: float64
s[4] # 0.25
s[2:] # 6 0.50 # 8 0.75 # 10 1.00 # dtype: float64
s.unique() # array([0. , 0.25, 0.5 , 0.75, 1. ])
s.value_counts() # 0.00 1 # 0.25 1 # 0.50 1 # 0.75 1 # 1.00 1 # dtype: int64
s.isin([0.25, 0.75]) # 2 False # 4 True # 6 False # 8 True # 10 False # dtype: bool
pop_tuple = {'서울특별시': 9720391, '부산광역시': 349506, '인천광역시': 2390191, '대구광역시': 1289435, '대전광역시': 12345623, '광주광역시': 12354352} population = pd.Series(pop_tuple) population # 서울특별시 9720391 # 부산광역시 349506 # 인천광역시 2390191 # 대구광역시 1289435 # 대전광역시 12345623 # 광주광역시 12354352 # dtype: int64
population['서울특별시'] # 9720391
population['서울특별시': '인천광역시'] # 서울특별시 9720391 # 부산광역시 349506 # 인천광역시 2390191 # dtype: int64
DataFrame
객체pd.DataFrame([{'A':2, 'B':3, 'D':3}, {'A':4, 'B':5, 'C':7}])
pd.DataFrame(np.random.rand(5,5), columns=['A', 'B', 'C', 'D', 'E'], index = [1,2,3,4,5])
male_tuple = {'서울특별시': 23524123, '부산광역시': 3493242, '인천광역시': 23923561, '대구광역시': 128941235, '대전광역시': 12345623453, '광주광역시': 12354332452} male = pd.Series(male_tuple) male
female_tuple = {'서울특별시': 3421204, '부산광역시': 342315442, '인천광역시': 2334511, '대구광역시': 124245, '대전광역시': 4902133, '광주광역시': 1223152} female = pd.Series(male_tuple) female
korea_df = pd.DataFrame({'인구수': population, '남자인구수': male, '여자인구수': female}) korea_d
korea_df.index # Index(['서울특별시', '부산광역시', '인천광역시', '대구광역시', '대전광역시', '광주광역시'], dtype='object')
korea_df.columns # Index(['인구수', '남자인구수', '여자인구수'], dtype='object')
korea_df['여자인구수'] # 서울특별시 23524123 # 부산광역시 3493242 # 인천광역시 23923561 # 대구광역시 128941235 # 대전광역시 12345623453 # 광주광역시 12354332452 # Name: 여자인구수, dtype: int64
korea_df['서울특별시':'인천광역시']
Index
객체idx = pd.Index([2,4,6,8,10]) idx #Int64Index([2, 4, 6, 8, 10], dtype='int64')
idx[1] # 4
idx[1:2:2] # Int64Index([4], dtype='int64')
idx[-1::] # Int64Index([10], dtype='int64')
idx[::2] # Int64Index([2, 6, 10], dtype='int64')
print(idx) print(idx.size) print(idx.shape) print(idx.dtype) print(idx.ndim) # Int64Index([2, 4, 6, 8, 10], dtype='int64') # 5 # (5,) # int64 # 1
Index
연산idx1 = pd.Index([1,2,4,6,8]) idx2 = pd.Index([2,4,5,6,7]) print(idx1.append(idx2)) print(idx1.difference(idx2)) print(idx1 - idx2) print(idx1.intersection(idx2)) print(idx1 & idx2) print(idx1.union(idx2)) print(idx1 | idx2) print(idx1.delete(0)) print(idx1.drop(2)) print(idx1 ^ idx2) #Int64Index([1, 2, 4, 6, 8, 2, 4, 5, 6, 7], dtype='int64') #Int64Index([1, 8], dtype='int64') #Int64Index([-1, -2, -1, 0, 1], dtype='int64') #Int64Index([2, 4, 6], dtype='int64') #Int64Index([2, 4, 6], dtype='int64') #Int64Index([1, 2, 4, 5, 6, 7, 8], dtype='int64') #Int64Index([1, 2, 4, 5, 6, 7, 8], dtype='int64') #Int64Index([2, 4, 6, 8], dtype='int64') #Int64Index([1, 4, 6, 8], dtype='int64') #Int64Index([1, 5, 7, 8], dtype='int64') #<ipython-input-59-8c125067fd7d>:7: FutureWarning: Index.__and__ operating as a set operation is deprecated, in the future this #will be a logical operation matching Series.__and__. Use index.intersection(other) instead. # print(idx1 & idx2) #<ipython-input-59-8c125067fd7d>:9: FutureWarning: Index.__or__ operating as a set operation is deprecated, in the future this #will be a logical operation matching Series.__or__. Use index.union(other) instead. # print(idx1 | idx2) #<ipython-input-59-8c125067fd7d>:12: FutureWarning: Index.__xor__ operating as a set operation is deprecated, in the future #this will be a logical operation matching Series.__xor__. Use index.symmetric_difference(other) instead. # print(idx1 ^ idx2)
Reference
: 이수안컴퓨터연구소 - 실습자료
: 이수안컴퓨터연구소 - 강의내용(Pandas 한번에 끝내기 - 데이터 과학의 패키지, 데이터 처리, 연산, 집계)