티스토리 뷰

Random seed 고정

  • 0 이상 10 미만의 정수형 난수를 균등분포로 추출해서 6행 4열짜리 DataFrame 생성
  • index와 column은 따로 지정하지 않는다.

결측치 NaN

  • 일반적으로 NaN은 결측치 취급한다.

  • 결측치 처리 법 중 하나: 결측치가 들어가 있는 행 삭제

  • 편하고 좋지만, 다른 열에 존재하는 데이터까지 날아가게 된다.

  • 만약, 결측치가 몇개 안된다면 삭제하는게 좋을 수 있다.

  • 그러나 일반적으로는 결측치를 다른 값으로 대체해서 사용한다.

  • 평균값, max, min 등등 다른 값으로 대체

 

결측치 제거

import numpy as np
import pandas as pd
from datetime import date, datetime, timedelta

# column과 index를 설정한다.
# column : 'A', 'B', 'C', 'D'
# index : 날짜 이용, 2020-01-01부터 1일씩 증가
# NaN값을 포함하는 새로운 column 'E' 추가
# 'E' column : [7, np.nan, 4, np.nan, 2, np.nan]

np.random.seed(0)
arr = np.random.randint(0, 10, (6, 4))
# start_day = datetime(2020, 1, 1)

df = pd.DataFrame(arr)
                 # columns = ['A', 'B', 'C', 'D'])
                 # index = [start_day + timedelta(days=x) for x in range(6)])

# df.index = pd.date_range('20200101', periods=6)
df.index = pd.date_range('20200101', '20200106')
df.columns = ['A', 'B', 'C', 'D']
df['E'] = [7, np.nan, 4, np.nan, 2, np.nan]
display(df)
###################################################3

# 결측치 제거
new_df = df.dropna(how='any', inplace=False) # dropna(how='any') => NaN이 하나라도 행에 포함되어 있으면 행 자체를 삭제
                      # dropna(how='all') => 행의 모든 열이 NaN인 경우 행을 삭제
                      # inplace=True : 원본 삭제, default는 False

display(new_df)

 

결측치 대체

# 결측치를 다른 값으로 대체
new_df = df.fillna(value=0)
display(new_df)

 

'E' column의 값이 NaN인 행들을 찾아서, 해당 행의 모든 column을 출력한다.

# 'E' column의 값이 NaN인 행들을 찾아서, 해당 행의 모든 column을 출력한다.
my_mask = df['E'].isnull()  # boolean mask
print(my_mask)
display(df.loc[my_mask,:])

 

중복행 처리

# 중복행 처리
import numpy as np
import pandas as pd

df = pd.DataFrame({'k1': ['one']*3 + ['two']*4, 
                   'k2': [1, 1, 2, 3, 3, 4, 4]})
display(df)
#################3

# DataFrme에서 중복행에 대한 boolean mask를 추출
print(df.duplicated())  # 중복행에 대한 boolean mask 추출

# one 1 => False
# one 1 => True

# 중복행 추출
display(df.loc[df.duplicated(),:])
display(df.drop_duplicates())  # 중복행이 없다.

display(df.drop_duplicates())         # 중복행이 없다          
display(df.drop_duplicates(['k1']))   # 중복행 기준 k1
display(df.drop_duplicates(['k1', 'k2']))  

replace()

# replace() => 대치
df = pd.DataFrame(np.random.randint(0, 10, (6, 4)),
                 columns = ['A', 'B', 'C', 'D'])

df['E'] = [7, np.nan, 4, np.nan, 2, np.nan]
display(df)

#####################
result = df.replace(8, -100)
display(result)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함