pandas_statistics
기술 통계 계산
- pandas는 일반적인 수학/통계 메서드를 가지고 있음
- pandas의 메서드는 처음부터 누락된 데이터를 제외하도록 설계 됨
- 전체 row나 column의 값이 NaN이 아니라면 NaN 값은 제외하고 계산
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]],
index=['a', 'b', 'c', 'd'],
columns=['one', 'two'])
df
|
one |
two |
| a |
1.40 |
NaN |
| b |
7.10 |
-4.5 |
| c |
NaN |
NaN |
| d |
0.75 |
-1.3 |
1. sum 메서드
- sum()메서드는 각 column값의 합을 더해서 series 객체를 반환
df.sum()
one 9.25
two -5.80
dtype: float64
- sum()메서드에 axis를 주어 각 row 값의 합을 반환
df.sum(axis=1)
a 1.40
b 2.60
c 0.00
d -0.55
dtype: float64
- skipna: 전체 row나 column의 값이 NaN가 아니라도 제외시키지 않을 수 있음 (skipna=False로 지정)
- skipna의 기본값은 True
df.sum(axis=1, skipna=False)
a NaN
b 2.60
c NaN
d -0.55
dtype: float64
2. idxmin, idxmax 메서드
- 최소, 최대값을 가지고 있는 index를 반환(실제로는 통계값을 반환하나, 통계값을 가리키는 간접통계값인 index를 반환)
df
|
one |
two |
| a |
1.40 |
NaN |
| b |
7.10 |
-4.5 |
| c |
NaN |
NaN |
| d |
0.75 |
-1.3 |
df.idxmin()
one d
two b
dtype: object
df.idxmax()
one b
two d
dtype: object
3. 누산 메서드: cumsum()
df.cumsum()
|
one |
two |
| a |
1.40 |
NaN |
| b |
8.50 |
-4.5 |
| c |
NaN |
NaN |
| d |
9.25 |
-5.8 |
4. Series 객체에서 중복된 값을 제거하는 메서드, 도수 메서드
s1 = Series(['c', 'a', 'd', 'a', 'b', 'b', 'c', 'c'])
s1
0 c
1 a
2 d
3 a
4 b
5 b
6 c
7 c
dtype: object
1) 중복된 값을 제거하는 메서드: unique()
- unique()에 의한 결과값은 정렬되지 않은 상태로 반환
unique = s1.unique()
unique
array(['c', 'a', 'd', 'b'], dtype=object)
2) 도수(값의 개수) 메서드: value_counts()
- value_counts() 메서드의 반환값은 series 객체, 내림차순으로 정렬됨
s1.value_counts()
c 3
a 2
b 2
d 1
dtype: int64
5. DataFrame 객체에서 중복된 값을 제거하는 메서드
data = DataFrame({'Q1':[1,3,4,3,4],
'Q2':[2,3,1,2,3],
'Q3':[1,5,2,4,4]})
data
|
Q1 |
Q2 |
Q3 |
| 0 |
1 |
2 |
1 |
| 1 |
3 |
3 |
5 |
| 2 |
4 |
1 |
2 |
| 3 |
3 |
2 |
4 |
| 4 |
4 |
3 |
4 |
res = data.apply(pd.value_counts)
res
|
Q1 |
Q2 |
Q3 |
| 1 |
1.0 |
1.0 |
1.0 |
| 2 |
NaN |
2.0 |
1.0 |
| 3 |
2.0 |
2.0 |
NaN |
| 4 |
2.0 |
NaN |
2.0 |
| 5 |
NaN |
NaN |
1.0 |
res1 = data.apply(pd.value_counts).fillna(0)
res1
|
Q1 |
Q2 |
Q3 |
| 1 |
1.0 |
1.0 |
1.0 |
| 2 |
0.0 |
2.0 |
1.0 |
| 3 |
2.0 |
2.0 |
0.0 |
| 4 |
2.0 |
0.0 |
2.0 |
| 5 |
0.0 |
0.0 |
1.0 |
6. Series, DataFrame 객체 내에 값이 있는지 검사하는 메서드: isin()
- isin()메서드는 True, Flase를 반환, 값이 있는 곳은 True, 값이 없는 곳은 False
- Seires, DataFrame에서 원하는 값을 골라내고 싶을 때 유용하게 사용하는 메서드
s1
0 c
1 a
2 d
3 a
4 b
5 b
6 c
7 c
dtype: object
mask = s1.isin(['b', 'c'])
mask
0 True
1 False
2 False
3 False
4 True
5 True
6 True
7 True
dtype: bool
s1[mask]
0 c
4 b
5 b
6 c
7 c
dtype: object
7. 누락된 데이터 처리
- Pandas의 설계 목표 중 하나는 누락된 데이터를 쉽게 처리하는
- Pandas에서 누락된 데이터는 어떤 타입이더라도 NaN(Not a Number)로 취급
stringData = Series(['aaa', 'bbbb', np.nan, 'ccccc'])
stringData
0 aaa
1 bbbb
2 NaN
3 ccccc
dtype: object
- NaN의 값은 파이썬의 None값 NA(Not Available)와 같은 값으로 취급
stringData.isnull()
0 False
1 False
2 True
3 False
dtype: bool
stringData[0]=None
stringData.isnull()
0 True
1 False
2 True
3 False
dtype: bool
stringData
0 None
1 bbbb
2 NaN
3 ccccc
dtype: object