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

 

'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