기술 통계 계산
- 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
'AI&BigData > Basics' 카테고리의 다른 글
[Pandas] 기술통계 계산 2 (0) | 2018.06.03 |
---|---|
Confusion matrix, accuracy, f1 score, precision, recall (0) | 2018.05.28 |
[Pandas] 정렬과 순위 (1) | 2018.05.06 |
[Pandas] 함수 적용과 매핑 (0) | 2018.05.06 |
[Pandas] Operation (0) | 2018.05.06 |
[Pandas] Index 객체, reindex (0) | 2018.05.06 |
[Pandas] DataFrame (0) | 2018.04.30 |
[Pandas] Series 객체 (0) | 2018.04.29 |
[Numpy] 브로드캐스트. 기타활용 (0) | 2018.04.24 |