LiJell's 성장기

16.python_NA_missing_duplicate_value 본문

Bigdata/파이썬_Python

16.python_NA_missing_duplicate_value

All_is_LiJell 2022. 1. 10. 20:41
반응형

Modified on Jan 10
# -- coding: utf-8 --
"""
Created on Tue Dec 28 14:56:05 2021

@author: hanju
"""

16. NA 결측치 처리, 중복값 제거 (significantly important)

  • NA (결측치) 처리
  • 숫자형 NA (float type), 문자형 NA
import numpy as np
import pandas as pd
from pandas import Series, DataFrame

s1= Series([1,2,3,np.nan])
s1
# 0    1.0
# 1    2.0
# 2    3.0
# 3    NaN
# dtype: float64

s2 = Series(['a','b','c', np.nan])
s2
# 0      a
# 1      b
# 2      c
# 3    NaN
# dtype: object
1. NA 수정
s1.mean() #2.0 NAN 값 빼고 평균값 산출함.
s1.fillna(0) #fillna 사용한 치환 >> 제일 많이 활용함
'''
0    1.0
1    2.0
2    3.0
3    0.0
dtype: float64
'''

s2.replace(np.nan,'a')
'''
0    a
1    b
2    c
3    a
dtype: object
'''

s1.isnull()
'''
0    False
1    False
2    False
3     True
dtype: bool
'''

s1[s1.isnull()] = 0
'''
0    1.0
1    2.0
2    3.0
3    0.0
dtype: float64
'''

2. NA 로의 수정

s3 = Series(['서울','.','대전','.','대구','.','부산'])
s3.replace('.',np.nan)

3. NA를 이전 값/ 이후 값 수정

s3.fillna(method = 'ffill') # NA를 (바로직전 값)앞에 있는 값으로 치환
'''
0    서울
1     .
2    대전
3     .
4    대구
5     .
6    부산
dtype: object
'''

s3.ffill # NA를 (바로직전 값)앞에 있는 값으로 치환
'''
<bound method Series.ffill of 0    서울
1     .
2    대전
3     .
4    대구
5     .
6    부산
dtype: object>
'''


s4 = s3.replace('.',np.nan)
s4
'''
0     서울
1    NaN
2     대전
3    NaN
4     대구
5    NaN
6     부산
dtype: object
'''

s4.fillna(method = 'ffill')
s4.ffill()
'''
0    서울
1    서울
2    대전
3    대전
4    대구
5    대구
6    부산
dtype: object
'''

4. NA를 갖는 행, 열 제거

df3 = DataFrame(np.arange(1,17).reshape(4,4), columns=list('ABCD'))
df3
'''
    A   B   C   D
0   1   2   3   4
1   5   6   7   8
2   9  10  11  12
3  13  14  15  16
'''

df3.iloc[0,0] = np.nan
df3.iloc[1,[0,1]] = np.nan
df3.iloc[2,[0,1,2]] = np.nan
df3.iloc[3,:] = np.nan
df3
'''
    A    B    C     D
0 NaN  2.0  3.0   4.0
1 NaN  NaN  7.0   8.0
2 NaN  NaN  NaN  12.0
3 NaN  NaN  NaN   NaN
'''

df3.dropna() # NA 를 하나라도 포함된 행 제거
'''
Empty DataFrame
Columns: [A, B, C, D]
Index: []
'''

df3.dropna(how = 'any') # NA 를 하나라도 포함한 행 제거
'''
Empty DataFrame
Columns: [A, B, C, D]
Index: []
'''

df3.dropna(how = 'all') # @ 자주 씀/ 모든 값이 NA인 행을 제거  꼭 쓰기
'''
    A    B    C     D
0 NaN  2.0  3.0   4.0
1 NaN  NaN  7.0   8.0
2 NaN  NaN  NaN  12.0
'''

df3.dropna(thresh = 2) # @ 자주 씀/ threshold( 한계점, 문지방) NA 아닌 값이 최소 2개 이상이면 제거하지 않음
'''
    A    B    C    D
0 NaN  2.0  3.0  4.0
1 NaN  NaN  7.0  8.0
'''
df3.dropna(axis=1, how='any') # default axis = 0 이기 때문에 axis를 변경해서 사용 가

df3
df3.dropna(subset = ['C']) # (특정) C컬럼에 NA가 있는 행 제거 @ 실무 자주 씀
'''
    A    B    C    D
0 NaN  2.0  3.0  4.0
1 NaN  NaN  7.0  8.0
'''

5. 중복값 처리

s5 = Series([1,1,2,3,4])
s5
'''
0    1
1    1
2    2
3    3
4    4
dtype: int6
'''

s5.unique() #유일한 값 확인 

# array([1, 2, 3, 4], dtype=int64)

s5.duplicated() #중복된 값 확인 (boolean으로 반환)
'''
0    False
1     True
2    False
3    False
4    False
dtype: bool
'''
s5.drop_duplicates() # 중복 제거
'''
0    1
2    2
3    3
4    4
dtype: int64
'''

df4 = DataFrame({'A':[1,1,3,4], 'B':[10,10,30,40]})
df4
'''
   A   B
0  1  10
1  1  10
2  3  30
3  4  40
'''
df4.drop_duplicates()
'''
   A   B
0  1  10
2  3  30
3  4  40
'''

df5 = DataFrame({'A':[1,1,3,4], 'B':[10,10,30,40], 'C':[100,200,300,400]})
df5
'''
   A   B    C
0  1  10  100
1  1  10  200
2  3  30  300
3  4  40  400
'''

df5.drop_duplicates() # 모든 컬럼의 값이 일치하는 행 제거
'''Out[236]: 
   A   B    C
0  1  10  100
1  1  10  200
2  3  30  300
3  4  40  400
'''
df5.drop_duplicates(subset=['A','B']) #(앞쪽) A, B 칼럼 값이 같으면 삭제
'''
   A   B    C
0  1  10  100
2  3  30  300
3  4  40  400
'''

df5.drop_duplicates(subset=['A','B'], keep='last') # 뒷쪽 살릴 때
'''
   A   B    C
1  1  10  200
2  3  30  300
3  4  40  400
'''
반응형

'Bigdata > 파이썬_Python' 카테고리의 다른 글

18.python_visualization  (0) 2022.01.10
17.python_datetime_expression  (0) 2022.01.10
15.python_stack_unstack_pivot_table  (0) 2022.01.08
14.python.drop_shift_rename  (0) 2022.01.07
13.python_merge_concat_join  (0) 2022.01.06
Comments