[파이썬 판다스] 시리즈

이현지·2024년 5월 23일

파이썬

목록 보기
8/21

판다스(pandas) 개요

판다스는 파이썬에서 자료 정제 및 분석을 빠르고 쉽게 할 수 있는 자료 구조와 관리 도구들을 가지고 있다.

판다스의 수치 해석 도구

NumPy, SciPy

판다스가 사용하는 라이브러리 & 시각화 도구

자료 분석 라이브러리: statsmodels, scikit-learn

시각화 도구: matplotlib

판다스는 NumPy 에서 사용되는 배열 기반 연산과
for 문 없이 계산하는 벡터화 계산을 기반으로 한다.

판다스는 이질적인 자료형을 다루는 반면,
넘파이는 동질적인 자료형에 대한 배열을 주로 다룬다.

판다스 라이브러리 불러오기

import pandas as pd
import numpy as np

rng = np.random.RandomState(1234)

판다스와 넘파이 같이 불러온다.

pandas는 데이터 분석을 위한 라이브러리로,
시리즈와 데이터프레임을 제공하여 데이터를 쉽게 조작하고 분석할 수 있다.

numpy는 수치 계산을 위한 라이브러리로, 배열 및 난수 생성 등을 지원한다.
(수치 계산을 위해 numpy 라이브러리도 같이 불러왔다.)

난수 생성기 초기화

np.random.RandomState(1234)

시드값 1234를 사용하여 난수 생성기를 초기화한다.
이를 통해 재현 가능한 난수 시퀀스를 생성할 수 있다.

자료 구조: 시리즈

시리즈는 연속적인 값들로 이루어진 일차원 배열과 인덱스로 불리는 자료 라벨(label) 배열로 이루어진 객체이다.

리스트로부터 간단한 시리즈를 다음과 같이 만들 수 있다.

obj = pd.Series([-5, 0, 10, 3])
obj
0    -5
1     0
2    10
3     3
dtype: int64

출력된 시리즈에서 왼쪽은 인덱스이고 오른쪽은 이다.

인덱스를 지정하지 않으면 기본값으로 0부터 N - 1의 숫자가 설정된다.
(예: 0, 1, 2 ... N-1 )

*N: 자료의 갯수

시리즈 객체로부터 인덱스 객체와 값에 대한 넘파이 배열을 얻을 수 있다.

obj.index
RangeIndex(start=0, stop=4, step=1)
obj.values
array([-5,  0, 10,  3], dtype=int64)

종종 각각의 자료에 대응되는 자료 라벨을 직접 지정하여 시리즈를 만드는 것이 바람직할 때가 있다.

obj2 = pd.Series([-5, 0, 10, 3], index=['a', 'b', 'd', 'c'])
obj2
obj2.index
Index(['a', 'b', 'd', 'c'], dtype='object')

넘파이와는 다르게 하나의 값 또는 여러 값들을 선택할 때 라벨을 사용할 수 있다.

obj2['a']
-5

인덱스: 값 변경하기

인덱스를 통해서 값을 변경할 수 있다.

데이터프레임이름['행이름'] = 바꿀 값 처럼 적용한다.

obj2['c'] = -12

인덱스: 대응되는 값 선택하기

인덱스 리스트를 통해서 대응되는 값들을 선택할 수 있다.

obj2[['a', 'd', 'c']]
a    -5
d    10
c   -12
dtype: int64

넘파이 함수와 연산

수학 함수, 스칼로 곱, 논리 배열에 대한 필터링과 같은 넘파이 함수 또는 연산들을 하더라도
인덱스 - 값 연결은 계속 보존된다.

obj2[obj2 < 0]
a    -5
c   -12
dtype: int64

0보다 작은 값들을 아웃풋으로 보여준다.

obj2 * 2
a   -10
b     0
d    20
c   -24
dtype: int64

각각의 값들에 2를 곱한 값들을 아웃풋으로 보여준다.

주의사항

원본이 바뀐 것이 아니다.

obj2
a    -5
b     0
d    10
c   -12
dtype: int64

'obj2' 는 바뀌지 않은 것을 알 수 있다.

지수 함수 계산: np.exp(데이터프레임이름)

import numpy as np

np.exp(obj2)
a        0.006738
b        1.000000
d    22026.465795
c        0.000006
dtype: float64

np.exp 함수는 입력된 배열 또는 시리즈의 각 요소에 대해 지수 함수 를 적용한다.

지수 함수는 자연 로그의 밑 e (약 2.718)를 사용하여 계산한다.

사전 형식으로 대응해보기

시리즈를 사전 형식으로 생각하여
열쇠(key)는 인덱스에, 값은 값에 대응하여 생각할 수 있다.

'a' in obj2
True

obj2에 a가 있다면 True 반환, 없으면 False를 반환한다.

사전형을 시리즈로 만들기

사전형 자료를 다음과 같이 시리즈로 만들 수 있다.

사전형 시리즈 만드는 법

df이름 = {'서울': 9776, '부산':3429} 와 같이 만든다.
시리즈 = pd.Series(df이름) 와 같다.

인구 = {'서울': 9776, '부산':3429, '대전':1531, '세종':276, '충남':2148, '대구':2465}
시리3 = pd.Series(인구)
시리3
대구    2465
대전    1531
부산    3429
서울    9776
세종     276
충남    2148
dtype: int64

사전형 을 시리즈로 만들 때 사전의 열쇠에 대한 정렬 순서로 저장이 된다.

열쇠에 대한 리스트 만들기

순서를 바꿔 저장하기
열쇠 에 대한 리스트 를 만들어 인덱스에 넘겨주면 된다.
(참고) 열쇠 : 도시들 을 뜻한다. (대전, 세종 ..)

도시들 = ['대전', '세종', '대구', '충남', '인천']
시리4 = pd.Series(인구, index=도시들)
시리4
대전    1531.0
세종     276.0
대구    2465.0
충남    2148.0
인천       NaN
dtype: float64

여기서 인천에 소실값이 나온 것을 확인할 수 있다.

소실값(missing values) 찾기

인천 을 제외한 도시들 은 인구 리스트와 적절히 연결되어 값을 설정했다.

반면, 인천은 인구 리스트에 없다.
따라서 NaN (소실값) 을 출력했다.

이 값을 판다스에서는 소실값(missing values)이라고 부른다.

isnullnotnull 함수

isnullnotnull 함수들을 이용해 소실 자료들을 찾을 수 있다.
시리4 에 소실값이 있는지 확인한다.

isnull 함수

pd.isnull(시리4)
대전    False
세종    False
대구    False
충남    False
인천     True
dtype: bool

소실값(missing values)이 없으면 False를 반환,
반면 소실값이 있으면 True를 반환한다.

notnull 함수: 결측치가 아닌 인덱스 확인

pd.notnull(시리4)
대전     True
세종     True
대구     True
충남     True
인천    False
dtype: bool

notnull 에서는 인천만 False 가 나왔다.

인스턴스 메소드

시리즈의 인스턴스 메소드로도 접근할 수 있다.

시리4.isnull()
대전    False
세종    False
대구    False
충남    False
인천     True
dtype: bool

산술 연산: 같은 인덱스 끼리 계산

시리3과 시리4라는 시리즈를 더해보자.

시리3
대구    2465
대전    1531
부산    3429
서울    9776
세종     276
충남    2148
dtype: int64
시리4
대전    1531.0
세종     276.0
대구    2465.0
충남    2148.0
인천       NaN
dtype: float64

두 개의 시리즈를 더할 때 시리즈1 + 시리즈2 와 같이 더한다.

시리3 + 시리4
대구    4930.0
대전    3062.0
부산       NaN
서울       NaN
세종     552.0
인천       NaN
충남    4296.0
dtype: float64

name 속성

시리즈 객체와 객체의 인덱스는
판다스의 다른 주요 영역과 통합되는 name 속성을 가지고 있다.

시리4.name = "인구통계"
시리4.index.name = "도시들"
시리4
도시들
대전    1531.0
세종     276.0
대구    2465.0
충남    2148.0
인천       NaN
Name: 인구통계, dtype: float64

도시들의 Name은 Name: 인구통계 으로 나오는 것을 확인할 수 있다.

시리즈 인덱스 변경하기

시리즈 인덱스는 다음과 같이 변경할 수 있다.

인덱스 이름을 ['김', '최', '윤', '홍'] 으로 바꿀 것이다.

obj
0    -5
1     0
2    10
3     3
dtype: int64
obj.index = ['김', '최', '윤', '홍']
obj
김    -5
최     0
윤    10
홍     3
dtype: int64

인덱스가 ['김', '최', '윤', '홍'] 으로 바뀐 것을 알 수 있다.

profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글