[AI][Data Analysis and Machine Learning]Pandas-Series_1

·2025년 2월 19일
post-thumbnail

‼️pandas 는 데이터 분석 라이브러리

행,열 형태의 정형 데이터 객체를 다룬다.

  • 2차원 데이터
  • 엑셀의 시트, RDB의 테이블과 같은 형태
  • 대표적인 객체
    • DataFrame
    • Series

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
0
010
120
230

dtype:int64

⇒ 왼쪽이 index, 오른쪽이 value (값), dtype: 데이터 타입

데이터로만 생성했을 때, index는 0-base 인덱스로 생성된다

  • indexing
    • s3[4]
      >4

data=, index= 명시하여 Series 생성

s4 = pd.Series(data=[1,2,3],index=[100,200,300])
s4
0
1001
2002
3003
s4[100]
>1

s4.index
>Index([100,200,300],dtype='int64')
  • index 가 정수일 필요는 X
s5 = pd.Series([1,2,3],['John','Mark',"Charlie"])
s5
0
John1
Mark2
Charlie3

dtype:int64

  • index 중복 허용

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
0
1000
1011
1022
1033
1044
s7.index
>Index([100, 101, 102, 103, 104], dtype='int64')

s7.index.values
>array([100, 101, 102, 103, 104])

# 기존에 없던 인덱스에 값 대입 => 새로운 값 추가!
s7[105]=90
s7

# 기존의 index 사용하여 새로운 Series 생성 가능
s8 = pd.Series(np.arange(6),s7.index)
s8
0
1000
1011
1022
1033
1044
1055

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])

# 데이터가 있는 것만 count 한다! NaN은 제외
s1.count9)
>15
  • NaN (Not a Number: 숫자가 들어와야 하는데 숫자가 아닌 값)
    • 원본데이터의 누락이라든지 DBMS 상의 null 값이라든지 등등

#numpy의 경우 원소중에 NaN 있으면 연산 불가능
a1 = np.array([2,2,2,2,np.NaN])
a1.mean()
>nan

#pandas 는 NaN 제외하고 평균값 계산
pd.Series(a1).mean()
>2.0

#각각의 value 수 세기 
s1.value_counts()

#상위 5개
s1.head() 

#하위 5개
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
0
a2
b4
c6
d10

산술연산

  • Series 의 경우에도 스칼라와의 연산 각 원소별로 스칼라와의 연산이 적용
  • Series 와의 연산은 각 인덱스에 맞는 값끼리 연산이 적용
    • 이때, 인덱스의 pair 가 맞지 않으면 결과는 NaN

Boolean selection

  • boolean Series 가 []와 함께 사용되면 True 값에 해당하는 값만 새로 반환되는 Series 객체에 포함됨
  • 다중조건의 경우, & | 를 사용하여 연결 가능
profile
어리둥절 빙글빙글 돌아가는 코딩세상~

0개의 댓글