본문 바로가기

언어/Python

[개념] Python Pandas에 대해 이해해보자 2 (Series 자료형 생성, Series형 조회, Series형 사칙연산)

2020/08/25 - [통계] - [개념] Python PANDAS에 대해 이해해보자 1 (데이터프레임 생성, 행과 열 조회(.loc, .iloc), 새로운 칼럼 추가, 칼럼

[개념] Python PANDAS에 대해 이해해보자 1 (데이터프레임 생성, 행과 열 조회(.loc, .iloc), 새로운 칼럼

(Pandas 라이브러리로 할 수 있는 일들을 조사해보고 정리하는 글입니다.) Python은 R처럼 데이터/통계 분석용으로 만들어진 프로그램이 아니라 프로그래밍용 언어이기 떄문에 일반적으로 통계분석

stat-thon.tistory.com

데이터 프레임에 대한 정리는 위 링크를 통해 확인


Pandas

<기능 요약 정리>

  1. Data frame 자료형 만들기
  2. Series 자료형 만들기
  3. 기술통계
  4. NA값 처리
  5. 엑셀 파일 불러오기 (파일 형식: xlsx, csv, Pandas_dataframe(pickle), json; txt도 가능)

 

오늘은 Pandas의 자료형중 Series형을 알아보자.


2. Series 자료형 만들기

 

Pandas 패키지를 사용하면 series 자료형을 만들 수 있다.

 

series 자료형은 어떠한 자료형도 포함할 수 있는 1차원 배열이다. (즉 칼럼이 하나)

 

인덱스와 인덱스에 해당하는 값을 1열로 구성한 자료인데

 

자세한 특징은 kongdols-room.tistory.com/103

Series의 생성, 설명, 소개, 옵션 - pandas(2)

파이썬 버전 3.7 기준 pandas 버전 0.25.1 기준  Series의 설명과 생성법 본 포스팅에서는 pandas에서의 Series에 대한 소개, 설명, 특징과 작성법에 대해서 다룬다. Series와 DataFrame에 관련된 내용을 다루.

kongdols-room.tistory.com

이 블로그를 참고해서 정리하도록 하겠다.


2-1. Series 자료형 생성 (pd.Series(data, index = [~]))

 

list, tuple로 Series 생성하기

 

Series 자료형 생성은 리스트나 튜플 형태의 데이터를 Series화 시켜 생성할 수 있다.

 

#list와 tuple 데이터로 Series형 생성
date = [10, 12, 15, 21, 30]
name = ('a', 'b', 'c', 'd', 'e')

date = pd.Series(date)
name = pd.Series(name)

[name, date]

 

 

1열 Series 생성

 

 

dictonary로 Series형 생성하기

 

dictionary를 만들어보자.

 

#딕셔너리로 Series형 생성

dic = {'a':'1', 'c':'2', 'd':'3'}
dic = pd.Series(dic)
dic

 

 

딕셔너리가 Series화 되었다.

 

 이때, 딕셔너리에 입력한 Key가 인덱스, 각 키에 대응되는 value는 그대로 value가 된다.

 

만약 pd.Series 함수를 쓸 때 index를 지정해주었다면, 지정한 인덱스 순서대로 재배열된다.

 

#딕셔너리 Series화 할 때, index 설정해주기
dic = {'a':'3', 'c':'1', 'b':'2'}
dic = pd.Series(dic, index = ['a','b','c', 'c', 'd'])
dic

 

 

 

pd.Series 함수에 입력한 index 순서에 따라 배열되었고, 지정하지 않은 인덱스 (d)는 NaN이 출력되었다.

 

 


스칼라형으로 Series 생성하기

 

pd.Series(스칼라, index = [~])는 모든 인덱스에 스칼라값을 출력한 Series를 생성한다.

 

#스칼라값으로 Series 생성

s = pd.Series(10, index = ['1','3','2'])

 

 

모두 같은 값인 Series를 생성했다.

 

 

 


2-2. Series 데이터 조회

 

Series형 데이터를 조회하는 방식은 인덱스를 활용한다.

 

 

1열짜리 데이터이기 때문에 특별히 칼럼을 지정해줄 필요가 없어 데이터프레임보다 조회가 간단하다.

 

 

#Series형 데이터의 조회 (행 하나만 조회)
date[4]

#Series형 데이터의 조회 (범위 행 조회)
date[0:3]

#Series형 데이터의 조회 (특정 여러 행 조회)
name[[1,3]]

 

 

인덱스를 활용해 조회할 수 있다. 이는 데이터프레임과 동일하다

 

 


 

Series형의 값들만 추출하기 (인덱스 제거)

 

Series 데이터에서 인덱스를 제거하고 값만 추출하려면 ## Series명.values ## 를 입력하면 된다.

#Series형 데이터의 값만 떼어내기

print(date.values)
type(date.values)

 

 

이 때 값들의 형식은 numpy의 ndarray다.

 

 


Series형의 값들 list화 (ndarray -> list)

 

Series에서 추출한 값 (ndarray형)를 list형으로 변환해보자.

 

## list() ##함수를 활용해 변환이 가능하다.

#Series형에서 추출한 값 list화 (ndarray -> list)

datev = list(date.values)
print(datev)
print(type(datev))

 

 

ndarray형이던 values가 list형으로 변환되었다.

 

 

 

Series형에서 인덱스 범위를 조회할 수도 있다.

 

Series형에서 index 범위 조회 (.index)

 

#Series형에서 index 범위 조회

date.index

 

 

0부터 5의 앞인 4까지가 인덱스 범위

 

 

인덱스의 데이터 타입을 조회하면?

#Series형에서 index의 타입은?

type(date.index)

 

 

요런 식으로 뜬다.

 

 


Series형에서 특정 조건 조회

 

데이터프레임에서 조회할 때와 유사하나, 특별한 함수명은 없이 칼럼 조회를 활용한다.

#Sereis형에서 특정 조건 조회
#데이터 프레임과 비슷하다. 유의할 점은 Series형은 데이터명과 칼럼명이 동일하다는 것

date[date>12]

 

 

12를 초과하는 값만 조회한다던가

 

 

#Sereis형에서 특정 조건 조회
#데이터 프레임과 비슷하다. 유의할 점은 Series형은 데이터명과 칼럼명이 동일하다는 것

name[name=='c']

 

 

이런 조회도 가능

 

 


Series형에서 특정 조건 조회할 때 논리연산 적용하기 (AND, OR)

 

이것은 Series형 뿐만 아니라 데이터 프레임에서도 적용가능하다.

 

근데 사실 Series형에서 굳이 AND나 OR를 적용할 일은 많지 않은 것 같다.

 

 

 

이 데이터로 보자

 

 

먼저 AND 적용하기

#Series형에서 논리연산 사용해 특정 조건 조회
#And는 두 조건을 각각 대괄호를 써서 따로 입력

date[date>10][date<=21]

 

 

이 조건을 통해 10<date<=21을 만듦

 

 

보다시피 And 조건으로 만들 수 있는 것은 이런 부등호식 정도..

 

OR 적용하기

 

Or을 적용하려면 대괄호 안에 소괄호로 각 조건을 묶고 조건 사이에 | (Shift+\)입력

 

#Series형에서 논리연산 사용해 특정 조건 조회
#Or은 대괄호 안에 소괄호로 두 조건을 각각 따로 묶고, 두 조건 사이에 | 넣기

date[(date<11)|(date>21)]

 

 

이렇게 쓸 수 있으나 쓸 일이 많을지는 모르겠다.

 

 

 


2-3. Series형 사칙연산 (같은 index끼리 자동 적용)

 

Series형은 사칙연산이 가능하다.

 

방법은 매우 간단하다.

 

 

 

계속 date 사용

 

 

#Series형 사칙연산

date+date
date-date
date*date
date/date

 

 

너무나 간단하다

 

 

 

그리고 이때 인덱스를 따로 지정해주면 같은 인덱스끼리만 계산된다.


Seires형 사칙연산 (index 지정)

 

#Series형 사칙연산(index 지정)

day = pd.Series([9,10,11,12,13], index = ['월','화','수','목','금'])
day2 = pd.Series(10, index = ['금','토','일'])

 

 

왼쪽부터 day와 day2 데이터를 만들어주었다.

 

 

day+day2

 

 

이렇게 유일하게 index가 동일한 '금'만 연산이 되고, 나머지는 NaN이 출력되었다.

 

 

각 Series형에 동일한 index가 있는 값들만 결과값이 출력된다.

 

그러므로 만약 Series형에서 인덱스를 지정하여 사칙연산을 해주려면, 모든 Series형에 포함된 index만 연산이 가능하다는 점을 알아두어야 한다.

 


여기까지 Pandas에서 다룰 수 있는 자료형 Series형을 알아보았다.

 

Series형은 어떻게 보면 Data Frame형의 하위호환이라서 거의 써보지 않았지만, 개념을 좀 더 확실히 이해할 수 있었다.