파이썬을 사용했을 때 데이터 분석에 빠질 수 없는 부분이 Pandas 모듈이다. 외부 파일을 읽어 분석하는데 주요한 기능들이 많이 저장되어 있다.
import pandas as pd
모듈을 불러올 때 "pd" 를 가장 많이 사용하기 때문에 위와 같이 선언한다.
1. Series 기초
-
1차원 배열을 나타내며, numpy의 ndarray 를 기반으로 함.
-
0개 이상의 데이터를 가질 수 있다.
-
index 는 0 부터 시작.
# 데이터 입력하기
pd.Series([1,2,3,4,5])
---------------------------------
0 1
1 2
2 3
3 4
4 5
dtype: int64
데이터 [1,2,3,4,5] 라는 1차원 배열을 선언하였더니, 각각의 index 가 같이 출력되는 모습을 볼 수 있다.
물론 다른 방법으로도 데이터를 넣을 수 있다.
import numpy as np
num = pd.Series(np.arange(1,300,2))
num
-------------------------------------
0 1
1 3
2 5
3 7
4 9
...
145 291
146 293
147 295
148 297
149 299
Length: 150, dtype: int32
numpy 모듈을 사용하여 300까지 홀수만 넣은 결과이다. 이외에도 여러가지의 입력방법이 있을 것이다.
이번에는 index 를 함께 명시하여 입력해보자.
num1 = pd.Series([1,2,3,4,5], [10, 'a', 5, '30', 2])
num1
-------------------------------------------------
10 1
a 2
5 3
30 4
2 5
dtype: int64
보이는 바와 같이 인덱스는 문자형도 가능하고 숫자를 순서 없이 두어도 입력한 순으로 데이터와 인덱스가 맞추어지는 모습을 볼 수 있다.
# 데이터 접근하기
num1.index
-------------------------
Index([10, 'a', 5, '30', 2], dtype='object')
num1.values
-------------------------
array([1, 2, 3, 4, 5], dtype=int64)
인덱스와 값은 다음과 같이 접근할 수 있다는 것을 알아보았다.
# 인덱스 활용하기
num2 = pd.Series([5,4,3,2,1], num1.index)
num2
------------------------------------------
10 5
a 4
5 3
30 2
2 1
dtype: int64
다른 series 를 선언할 때 다른 series 에서 인덱스를 가져와 쓸 수 있다. 물론 shape 가 똑같아야 가능하다.
# 주요 함수
num = np.random.randint(1, 10, 20)
num = pd.Series(num)
num.value_counts()
----------------------------------
4 6
7 3
9 2
8 2
5 2
2 2
1 2
6 1
dtype: int64
Series 에서 주로 쓰는 함수 중에 하나는 value_count( ) 이다. 기능은 Series 의 빈도를 알려주는 것이다. 위와 같은 경우는 numpy 모듈의 random 을 이용해 1~9 까지의 숫자를 랜덤으로 20개를 만들어 Series 안에 넣고 빈도를 만든 것이다. 숫자 4 가 6개로 가장 많이 나온 것을 알 수 있다.
num.unique()
-------------------------
array([3, 2, 8, 5, 1, 9, 4, 6])
Series 에서 쓰이는 함수 중 하나인 unique( ) 는 중복을 제외하고 어떠한 값들이 있는지 알려주는 기능을 한다.
2. Series 데이터 연산
# index 기준 연산
a = pd.Series([1,2,3,4,5], ['a', 'c', 'd', 'e', 'b'])
b = pd.Series([3,2,1,4,5], ['d', 'e', 'a', 'b', 'c'])
a + b
----------------------------------------------------
a 2
b 9
c 7
d 6
e 6
dtype: int64
Series 를 활용해서 각각 같은 인덱스에 대해 연산을 진행할 수 있다. shape 가 같은데 맞는 인덱스가 없으면 연산이 불가능 하기 때문에 NaN 이 반환된다.
# 조건에 맞는 데이터 연산
a[a > 3] + b[b < 3]
------------------------
a NaN
b NaN
e 6.0
dtype: float64
a 값 중 3 초과인 데이터와 b 값 중 3 미만인 데이터를 더하는 코드를 실행하였더니 NaN 이 2번 뜨고 값이 하나가 나왔다. a 값 중 3이 넘는 값을 가진 인덱스는 b, e 이고, b 값 중 3 아래인 인덱스는 a, e 이다. 이 중 공통적인 인덱스인 e 에 대해서는 연산이 가능하기 때문에 숫자 6.0 이 나왔고, a 와 b 는 연산할 값이 없기 때문에 NaN 이 나오게 되었다.
3. Series 데이터 조작
# 기본 Series
num = pd.Series([1,2,3,4,5], ['a','b','c','d','e'])
num
-----------------------------
a 1
b 2
c 3
d 4
e 5
dtype: int64
# 데이터 추가/변경하기
num['f'] = 10
num
--------------------
a 1
b 2
c 3
d 4
e 5
f 10
dtype: int64
데이터를 추가하는 방법은 단순하다. 원하는 인덱스를 넣고 값을 추가하면 추가 가능하다. 변경 또한 인덱스를 설정하고 값을 넣으면 변경이 된다.
# 데이터 삭제하기
num.drop('c')
num
-----------------------
a 1
b 2
c 3
d 4
e 5
f 10
drop( ) 을 사용하는 것이 정답이다. 그런데 지금 보니 c 가 삭제되지 않고 그대로 남아있다. 삭제를 한 순간이 있었지만 저 코드가 실행될 때에만 삭제된 것이다. 바로 삭제한 것을 저장하기 위해서는 inplace 를 활용한다.
num.drop('c', inplace=True)
num
------------------------
a 1
b 2
d 4
e 5
f 10
dtype: int64
inplace 를 True 로 하였더니 정상적으로 삭제된 모습을 볼 수 있다.
'데이터 분석 > 자료구조(Data structure)' 카테고리의 다른 글
파이썬 - Pandas 기초 정리(DataFrame - 2) (0) | 2020.12.23 |
---|---|
파이썬 - Pandas 기초 정리(DataFrame - 1) (0) | 2020.12.22 |
파이썬 - Numpy 기초 정리(2) (0) | 2020.12.17 |
파이썬 - Numpy 기초 정리(1) (0) | 2020.12.16 |
[자료구조] Heap(힙) (0) | 2020.08.28 |