‼️pandas 는 데이터 분석 라이브러리
행,열 형태의 정형 데이터 객체를 다룬다.
- 2차원 데이터
- 엑셀의 시트, RDB의 테이블과 같은 형태
- 대표적인 객체
Series
- pandas 의 기본 객체 중 하나
- numpy의 ndarray를 기반으로 인덱싱 기능이 추가된 1차원 배열을 나타냄
- index 를 지정X 시, 기본적으로 ndarray와 같이 0-based 인덱스 생성
- 지정할 경우 명시적으로 지정된 index 사용
- 같은 타입의 0개 이상의 데이터를 가질 수 있음
import numpy as np
import pandas as pd
Series 생성
s1 = pd.Series([10,20,30])
s1
dtype:int64
⇒ 왼쪽이 index, 오른쪽이 value (값), dtype: 데이터 타입
데이터로만 생성했을 때, index는 0-base 인덱스로 생성된다
data=, index= 명시하여 Series 생성
s4 = pd.Series(data=[1,2,3],index=[100,200,300])
s4
s4[100]
>1
s4.index
>Index([100,200,300],dtype='int64')
s5 = pd.Series([1,2,3],['John','Mark',"Charlie"])
s5
dtype:int64
dict 로 Series 생성
sdata = {'김철수': 35000, '이상현': 67000, '최종수': 12000, '박진관': 4000}
sdata
>{'김철수': 35000, '이상현': 67000, '최종수': 12000, '박진관': 4000}
s6 = pd.Series(sdata)
s6
| 0 |
|---|
| 김철수 | 35000 |
| 이상현 | 67000 |
| 최종수 | 12000 |
| 박진관 | 4000 |
dtype: int64
s7 = pd.Series(data=np.arange(5),index=np.arange(100,105),dtype=np.int16)
s7
s7.index
>Index([100, 101, 102, 103, 104], dtype='int64')
s7.index.values
>array([100, 101, 102, 103, 104])
s7[105]=90
s7
s8 = pd.Series(np.arange(6),s7.index)
s8
| 0 |
|---|
| 100 | 0 |
| 101 | 1 |
| 102 | 2 |
| 103 | 3 |
| 104 | 4 |
| 105 | 5 |
dtype: int64
Series name, index name, index 변경
s6
| 0 |
|---|
| 김철수 | 35000 |
| 이상현 | 67000 |
| 최종수 | 12000 |
| 박진관 | 4000 |
s6.name='급여'
s6
| 급여 |
|---|
| 김철수 | 35000 |
| 이상현 | 67000 |
| 최종수 | 12000 |
| 박진관 | 4000 |
Series ndim,shape,size,len,unique,count,value_counts 함수
- size : 개수 반환
- shape: 튜플형태로 shape 반환
- unique: 유일한 값만 ndarray로 반환
- count : NaN을 제외한 개수를 반환
- mean: NaN을 제외한 평균
- value_counts: NaN을 제외하고 각 값들의 빈도를 반환
s1 = pd.Series([1, 1, 2, 1, 2, 2, 2, 1, 1, 3, 3, 4, 5, 5, 7,np.NaN])
s1
s1.ndim
>1
s1.shape
(16,)
s1.size
16
len(s1)
16
s1.unique()
>array([ 1., 2., 3., 4., 5., 7., nan])
s1.count9)
>15
- NaN (Not a Number: 숫자가 들어와야 하는데 숫자가 아닌 값)
- 원본데이터의 누락이라든지 DBMS 상의 null 값이라든지 등등
a1 = np.array([2,2,2,2,np.NaN])
a1.mean()
>nan
pd.Series(a1).mean()
>2.0
s1.value_counts()
s1.head()
s1.tail()
Series 연산
- index 기준으로 연산
- numpy와 마찬가지로 Series 도 Series 끼리 연산 가능
- 같은 인덱스 기준으로 연산
- (DataFrame에서도 동일하게 적용)
s1 = pd.Series([1, 2, 3, 4], ['a', 'b', 'c', 'd'])
s2 = pd.Series([6, 3, 2, 1], ['d', 'c', 'b', 'a'])
s1+s2
산술연산
- Series 의 경우에도 스칼라와의 연산 각 원소별로 스칼라와의 연산이 적용
- Series 와의 연산은 각 인덱스에 맞는 값끼리 연산이 적용
- 이때, 인덱스의 pair 가 맞지 않으면 결과는 NaN
Boolean selection
- boolean Series 가 []와 함께 사용되면 True 값에 해당하는 값만 새로 반환되는 Series 객체에 포함됨
- 다중조건의 경우, & | 를 사용하여 연결 가능