지난번 포스팅에서는 결측값 여부 확인, 결측값 개수 세기 등을 해보았습니다.

 

이번 포스팅에서는 결측값을 채우고 대체하는 다양한 방법들로서,

 

 - 결측값을 특정 값으로 채우기

   (replace missing valeus with scalar value)

 

 - 결측값을 앞 방향 혹은 뒷 방향으로 채우기

   (fill gaps forward or backward)

 

 - 결측값 채우는 회수를 제한하기

   (limit the amount of filling)

 

 - 결측값을 변수별 평균으로 대체하기

   (filling missing values with mean value per columns)

 

 - 결측값을 다른 변수의 값으로 대체하기

   (filling missing values with another columns' values)

 

등에 대해서 알아보도록 하겠습니다.  모델링에 들어가기 전에 결측값을 확인하고 결측값을 처리하는 절차가 반드시 필요하고 매우 중요한 부분입니다. 

 

 

 

 

 

먼저 필요한 pandas, numpy 모듈을 불러오고, 결측값(missing values)을 포함하고 있는 DataFrame을 만들어보겠습니다.  결측값은 df.ix[x, y] 에 None 또는 np.nan 을 할당해주면 됩니다.

 

 

#%% missing value imputation, filling missing value

## importing modules

 

In [1]: import pandas as pd

 

In [2]: import numpy as np

 

## making DataFrame

In [3]: df = pd.DataFrame(np.random.randn(5, 3),

   ...: columns=['C1', 'C2', 'C3'])

   ...:

 

In [4]: df

Out[4]:

         C1        C2        C3
0 -0.905421 -0.228791 -0.850988
1  0.558819  0.564767  0.232641
2 -0.834515 -0.204626 -0.566917
3  0.242694 -0.317098 -0.673298
4 -0.497041 -0.301435 -1.265128

 

 

In [5]: df.ix[0, 0] = None

 

In [6]: df.ix[1, ['C1', 'C3']] = np.nan

 

In [7]: df.ix[2, 'C2'] = np.nan

 

In [8]: df.ix[3, 'C2'] = np.nan

 

In [9]: df.ix[4, 'C3'] = np.nan

 

In [10]: df

Out[10]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767       NaN
2 -0.834515       NaN -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435       NaN

 

 

 

 

 

  (1) 결측값을 특정 값으로 채우기 (replace missing values with scalar value) : df.fillna(0)

 

결측값을 '0' 으로 대체해보겠습니다.

 

 

In [11]: df_0 = df.fillna(0)

 

In [12]: df_0

Out[12]:

         C1        C2        C3
0.000000 -0.228791 -0.850988
0.000000  0.564767  0.000000
2 -0.834515  0.000000 -0.566917
3  0.242694  0.000000 -0.673298
4 -0.497041 -0.301435  0.000000

 

 

 

 

 

이번에는 결측값을 'missing' 이라는 string 값으로 채워보겠습니다.

 

 

In [13]: df_missing = df.fillna('missing')

 

In [14]: df_missing

Out[14]:

C1 C2 C3

         C1        C2        C3
0   missing -0.228791 -0.850988
1   missing  0.564767   missing
2 -0.834515   missing -0.566917
3  0.242694   missing -0.673298
4 -0.497041 -0.301435   missing

 

 

 

 

 

  (2) 결측값을 앞 방향 혹은 뒷 방향으로 채우기 (fill gaps forward or backward)

      : fillna(method='ffill' or 'pad'), fillna(method='bfill' or 'backfill')

 

(2-) 결측값을 앞 방향으로 채워나가려면(fill gaps forward) fillna(method='ffill') 혹은 fillna(method='pad') 를 사용하면 됩니다.

 

 

In [10]: df

Out[10]:

          C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767       NaN
2 -0.834515       NaN -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435       NaN

 

In [15]: df.fillna(method='ffill') # Fill values forward

Out[15]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767 -0.850988
2 -0.834515  0.564767 -0.566917
3  0.242694  0.564767 -0.673298
4 -0.497041 -0.301435 -0.673298

 

 

In [16]: df.fillna(method='pad') # Fill values forward

Out[16]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767 -0.850988
2 -0.834515  0.564767 -0.566917
3  0.242694  0.564767 -0.673298
4 -0.497041 -0.301435 -0.673298

 

 

 

 

 

다음은 (2-2) 결측값을 뒷 방향으로 채워나가기 위해 fillna(method='bfill') 혹은 fillna(method='backfill')을 사용한 예시의 결과입니다.

 

 

In [10]: df

Out[10]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767       NaN
2 -0.834515       NaN -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435       NaN

 

In [17]: df.fillna(method='bfill') # Fill values backward

Out[17]:

         C1        C2        C3
0 -0.834515 -0.228791 -0.850988
1 -0.834515  0.564767 -0.566917
2 -0.834515 -0.301435 -0.566917
3  0.242694 -0.301435 -0.673298
4 -0.497041 -0.301435       NaN

 

 

In [18]: df.fillna(method='backfill') # Fill values backward

Out[18]:

         C1        C2        C3
0 -0.834515 -0.228791 -0.850988
1 -0.834515  0.564767 -0.566917
2 -0.834515 -0.301435 -0.566917
3  0.242694 -0.301435 -0.673298
4 -0.497041 -0.301435       NaN

 

 

 

 

 

  (3) 앞/뒤 방향으로 결측값 채우는 회수를 제한하기 (limit the amount of filling)

     : fillna(method='ffill', limit=number), fillna(method='bfill', limit=number)

 

앞 방향이나 뒷 방향으로 채워나갈 때 fillna(limit=1) 를 사용해서 결측값 채우는 '개수'를 '1'개로 한정해 보겠습니다.  시계열 데이터 분석할 때 유용하게 사용하는 기능 중의 하나입니다.  

 

아래 예에서 빨간색으로 밑줄 친 부분을 유심히 살펴보시면 이해하기 편하실 거예요.

 

 

In [10]: df

Out[10]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767       NaN
2 -0.834515       NaN -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435       NaN

 

In [19]: df.fillna(method='ffill', limit=1) # fill values forward with limit

Out[19]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767 -0.850988
2 -0.834515  0.564767 -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435 -0.673298

 

 

In [20]: df.fillna(method='bfill', limit=1) # fill values backward with limit

Out[20]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1 -0.834515  0.564767 -0.566917
2 -0.834515       NaN -0.566917
3  0.242694 -0.301435 -0.673298
4 -0.497041 -0.301435       NaN

 

 

 

 

 

  (4) 결측값을 변수별 평균으로 대체하기(filling missing values with mean per columns)

      : df.fillna(df.mean()), df.where(pd.notnull(df), df.mean(), axis='columns')

 

 

In [10]: df

Out[10]:

         C1        C2        C3
0       NaN -0.228791 -0.850988
1       NaN  0.564767       NaN
2 -0.834515       NaN -0.566917
3  0.242694       NaN -0.673298
4 -0.497041 -0.301435       NaN

 

# mean per columns

In [21]: df.mean()

Out[21]:

C1 -0.362954

C2 0.011514

C3 -0.697068

dtype: float64

 

# filling missing values with mean per columns

# way 1

In [22]: df.fillna(df.mean())

Out[22]:

         C1        C2        C3
0 -0.362954 -0.228791 -0.850988
1 -0.362954  0.564767 -0.697068
2 -0.834515  0.011514 -0.566917
3  0.242694  0.011514 -0.673298
4 -0.497041 -0.301435 -0.697068

 

 

# way 2

In [23]: df.where(pd.notnull(df), df.mean(), axis='columns')

Out[23]:

         C1        C2        C3
0 -0.362954 -0.228791 -0.850988
1 -0.362954  0.564767 -0.697068
2 -0.834515  0.011514 -0.566917
3  0.242694  0.011514 -0.673298
4 -0.497041 -0.301435 -0.697068

 

 

 

 

위의 예시는 각 칼럼의 평균으로 -> 각 칼럼의 결측값을 대체하는 방식이었습니다.

아래 예시는 'C1' 칼럼의 평균을 가지고 'C1', 'C2', 'C3' 칼럼의 결측값을 대체하는 방법입니다.

 

 

In [24]: df.mean()['C1']

Out[24]: -0.36295411360962238

 

In [25]: df.fillna(df.mean()['C1'])

Out[25]:

         C1        C2        C3
0 -0.362954 -0.228791 -0.850988
1 -0.362954  0.564767 -0.362954
2 -0.834515 -0.362954 -0.566917
3  0.242694 -0.362954 -0.673298
4 -0.497041 -0.301435 -0.362954

 

 

 

 

 

아래의 예시는 'C1'칼럼과 'C2' 칼럼에 대해서만 각 칼럼의 평균을 가지고 -> 각 칼럼에 있는 대체값을 대체하는 경우입니다.  좀 헷갈릴 수 있는데요, 위의 2개의 예시의 혼합 형태라고 보시면 되겠습니다.

('C3'의 NaN 값은 결측값 그대로 있습니다.)

 

 

In [26]: df.mean()['C1':'C2']

Out[26]:

C1   -0.362954
C2    0.011514
dtype: float64

 

 

In [27]: df.fillna(df.mean()['C1':'C2'])

Out[27]:

         C1        C2        C3
0 -0.362954 -0.228791 -0.850988
1 -0.362954  0.564767       NaN
2 -0.834515  0.011514 -0.566917
3  0.242694  0.011514 -0.673298
4 -0.497041 -0.301435       NaN

 

 

 

 

 

  (5) 결측값을 다른 변수의 값으로 대체하기

      (filling missing values with another columns' values)

 

두가지 방법이 있는데요, 먼저 np.where()와 pd.notnumm() 를 사용해서 np.where(pd.notnull(df['C2']) == True, df['C2'], df['C1']) 처럼 'C2' 칼럼에서 결측값이 없으면 'C2' 칼럼의 값을 그대로 사용하고, 'C2'칼럼에 결측값이 있으면 'C1' 칼럼의 값을 가져다가 결측값을 채워보겠습니다.

 

 

In [28]: df_2 = pd.DataFrame({'C1': [1, 2, 3, 4, 5],

    ...: 'C2': [6, 7, 8, 9, 10]})

    ...:

 

In [29]: df_2.ix[[1, 3], ['C2']] = np.nan

 

In [30]: df_2

Out[30]:

   C1    C2
0   1   6.0
1   2   NaN
2   3   8.0
3   4   NaN
4   5  10.0

 

 

## making new column by filling missing values with another column's value

# way 1 : by np.where => quick

In [31]: df_2['C2_New'] = np.where(pd.notnull(df_2['C2']) == True, df_2['C2'], df_2['C1'])

 

In [32]: df_2

Out[32]:

   C1    C2    C2_New
0   1   6.0       6.0
1   2   NaN     2.0
2   3   8.0       8.0
3   4   NaN     4.0
4   5  10.0      10.0

 

 

 

 

 

아래의 loop programming은 위와 동일한 결과를 반환하지만 시간은 훨~씬 오래 걸린다는 점 유의하시구요, 그냥 '아, 이렇게도 할 수 있구나...' 정도로만 참고하시기 바랍니다.

(당연히, 위의 np.where()와 pd.notnull() 을 사용하는 것이 속도도 빠르고 코드도 짧고 쉽기 때문에 추천)

 

 

# way 2 : by loop programming => takes long time

In [33]: for i in df_2.index:

    ...:     if pd.notnull(df_2.ix[i, 'C2']) == True:

    ...:         df_2.ix[i, 'C2_New_2'] = df_2.ix[i, 'C2']

    ...:     else:

    ...:         df_2.ix[i, 'C2_New_2'] = df_2.ix[i, 'C1']

    ...:

    ...:

 

In [34]: df_2

Out[34]:

   C1    C2  C2_New  C2_New_2
0   1   6.0     6.0       6.0
1   2   NaN     2.0       2.0
2   3   8.0     8.0       8.0
3   4   NaN     4.0       4.0
4   5  10.0    10.0      10.0

 

 

 

 

결측값을 그룹별 평균으로 대체하기는 http://rfriend.tistory.com/402 를 참고하세요. 

 

DataFrame 내 여러개의 칼럼별로 서로 다른 결측값 대체 전략을 사용하는 방법은 https://rfriend.tistory.com/542 를 참고하세요. 

 

결측값을 선형회귀모형 추정값으로 대체하는 방법은 rfriend.tistory.com/636 를 참고하세요. 

 

많은 도움 되었기를 바랍니다.

 

 

728x90
Posted by R Friend Rfriend

댓글을 달아 주세요

  1. 2020.06.11 12:17  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend Rfriend 2020.06.11 12:51 신고  댓글주소  수정/삭제

      안녕하세요 민트레몬님,

      하고자 하시는 분석 목적과 분석방법이 무엇인지 제가 정확하게 알 수 없으므로 제가 드리는 말씀이 틀릴 수도 있구요, 그냥 참고만 해주시면 좋겠습니다.

      '주택소유'와 '주택가격'이 핵심 독립변수라고 하였고, 주택소유가 없으면 주택가격도 missing 일텐데 어떻게 처리를 해야할지가 의문이라고 하셨는데요, 좀 어렵고 헷갈리네요.

      생각해볼 수 있는 옵션으로 '주택소유 여부'별로 데이터셋을 구분하고 모델도 구분해서 따로 따로 만드는 방법 (즉, 주택소유자 대상의 주택가격 독립변수도 포함된 모델, 주택 미소유자 대상의 주택가격 독립변수는 빠진 모델 따로) 을 생각해볼 수 있을것 같습니다. (일종의 층화 샘플링 개념으로)

      '주택소유'와 '주택가격' 변수를 모두 포함한 하나의 모델을 만들어야만 한다면,
      결측치 처리를 해야 할텐데요, 방법별로 전부 다 이슈가 있을 듯 합니다.

      완전제거법(list-wise deletion)의 경우 무주택자가 모두 제거될 것이므로 부적합 할것 같구요 (결국 주택소유자와 주택미소유자로 구분해서 따로 따로 모델링...),

      단일대체방법(single imputation)의 경우 (가령, 평균이나 중앙값이나 아니면 0?), 이게 분석의 목적에 부합하는 것인지에 대한 근본적인 의문이 들 것 같습니다 (주택소유가 핵심 독립변수라고 하셨으므로, 무주택자와 유주택자 간에 근본적인 특성 차이가 있을 것 같음). 그리고 결측치를 가진 다수의 관측치에 대해 단일 대체한 값으로 인해 주택가격의 분포를 왜곡시키는 부작용도 있을 것이구요.

      다중대체방법(Multiple Imputation)의 경우도 위의 단일대체방법과 같이 이게풀려고 하는 문제의 목적에 부합하는 것인지에 대한 근본적인 의문이 역시 발생할 것 같습니다. (즉, 응답자의 무응답이나 입력 오류라든지 등으로 인한 결측치가 아니라 원래 집을 소유하지 않았기 때문에 주택가격이 missing 인 것이므로).

      결국, 분석 목적이 무엇인가에 따라 각 옵션별로 어떤 영향이 있을지를 평가해보고 결정해야 할거 같네요.

      글 써놓고 보니 횡설수설한거 같아 죄송합니다. ㅠ_ㅠ

  2. 민트레몬 2020.06.12 15:43  댓글주소  수정/삭제  댓글쓰기

    답변 남겨주실지 몰랐는데 정말 감사드려요 ㅠㅠ
    역시 결측치를 처리하는게 문제가 있는거 같네요 ㅠㅠ 결측치를 처리해야하나 아니면 아예 대상을 달리 해서 구분해야 하나 고민이 많았는데.. 일단 의견 주신걸 보니 결측치 처리보다는 모델링으로 문제를 해결해야 되겠다는 생각이 드네요 ㅠㅠ
    정말 감사드립니다!!!ㅠㅠㅠ 복많이 받으시고 항상 좋은일만 생기셔요 ㅠㅠ

  3. 2020.06.27 21:02  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend Rfriend 2020.06.28 16:37 신고  댓글주소  수정/삭제

      질문의 의도를 정확하게 이해하지 못하겠습니다.

      df.fillna(테이블 만들 때 설정해놓은 default 값) 이렇게 하면 될텐데요, 이거 말고 다른 방법을 원하시는 건지요?

  4. 2020.06.29 13:17  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend Rfriend 2020.06.29 16:58 신고  댓글주소  수정/삭제

      안녕하세요.

      여러개의 칼럼별로 결측값을 다른 방법 혹은 다른 default 값을 사용하여 대체하는 방법은 아래의 링크 포스팅을 참고하세요.

      https://rfriend.tistory.com/542

  5. 로즈마리 2021.01.04 17:29  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.! 좋은 정보 감사합니다!
    혹시 공백을 NaN으로 채울 수 있는 함수도 있을까요?

    • R Friend Rfriend 2021.01.04 18:30 신고  댓글주소  수정/삭제

      안녕하세요 로즈마리님.

      공백이라고 하면 문자열에서 "" 로 정의할 수 있는건지요? 만약 그렇다면 아래 사용자정의함수 코드 참고하세요.
      (댓글란에 파이썬 코드를 붙여넣기하면 들여쓰기 indentation이 모두 무시가 되어 왼쪽으로 맞춤되어 버립니다. 따라서 아래의 사용자 정의 함수 부분의 들여쓰기는 새로 해주셔야 합니다.)

      import numpy as np
      import pandas as pd

      df = pd.DataFrame({'col': ['a', 'b', '', 'd', 'e', '']})

      print(df)

      col
      0 a
      1 b
      2
      3 d
      4 e
      5

      # user defined function
      # (들여쓰기 맞추어 주세요)
      def blank_nan(x):
      if x == '':
      x = np.nan
      return x

      # apply the UDF
      df['col'] = df['col'].apply(blank_nan)

      print(df)
      col
      0 a
      1 b
      2 NaN
      3 d
      4 e
      5 NaN

  6. 인블 2021.02.05 14:23  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 범주형 데이터에서 category 의 비율 별로 결측치를 impute해주는 방법은 없는지 여쭤보고 싶습니다. 예를 들어 결측치를 제외한 데이터가 A :80%, B :10%, C :10%의 비율로 분포하고 있을 경우, 결측치를 채울때 A로 impute할 확률이 80%, B impute 확률이 10%, C impute 확률이 10% 이렇게 하고싶은데, 방법을 찾아봐도 없어서 여기다 여쭤봅니다. 도움 되시게끔 광고 클릭하였습니다 ㅎㅎㅎㅎ

    • R Friend Rfriend 2021.02.05 21:11 신고  댓글주소  수정/삭제

      안녕하세요 인블님,
      범주형 데이터에서 결측치의 정의를 '' 로 한다고 했을 때, 아래처럼 간단한 예제 DataFrame과 범주 비율(가령, A: 80%, B: 10%, C: 10%의 비율 분포)별로 결측치를 보간하는 코드를 짜보았습니다.

      아래 포스팅 참고하세요.
      ==> https://rfriend.tistory.com/613


      ----------------
      (1) np.random.uniform(low=0, high=1, size=1) 함수를 사용해서 0~1 사이의 실수로 부터 난수를 발생시킵니다.
      * 참고: https://rfriend.tistory.com/284

      (2) 난수값이 0.9~1 사이 값이면 x='C', 난수값이 0.8~0.9 이면 x='B', 난수값이 0~0.8 이면 x='A' 를 할당합니다. (A: 80%, B: 10%, C: 10%의 확률)
      ==> 이를 cat_fill_na() 라는 사용자 정의 함수로 정의하였습니다.

      (3) for loop 순환문을 통해 조건절로 x='' 이면 위의 (2)에서 정의한 cat_fill_na() 함수를 적용하도록 하였습니다.

      댓글란에 코드를 옮기면 들여쓰기(indentation)가 모두 무시되므로 IDE에서 아래 코드를 다시 옮겨써서 들여쓰기를 맞추어주시기 바랍니다.

      과ㅇ ㄱㅗ 눌러주셔서 감사합니다. 커피 잘 마시겠습니다. :-)

      -----------------------
      import pandas as pd
      import numpy as np

      df = pd.DataFrame({'x1': ['A', 'A', 'C', '', 'A', 'B', 'A', 'B', 'A', 'A',
      'C', '', 'A', 'A', '', 'A', 'B', 'A', 'C', 'A', '']})


      df

      x1
      0 A
      1 A
      2 C
      3 <-- missing
      4 A
      5 B
      6 A
      7 B
      8 A
      9 A
      10 C
      11 <-- missing
      12 A
      13 A
      14 <-- missing
      15 A
      16 B
      17 A
      18 C
      19 A
      20 <-- missing

      ## user defined function
      ## (들여쓰기 모두 무시되므로 다시 IDE에서 쓰세요)
      def cat_fill_na():
      rnd_num = np.random.uniform(0, 1, 1)

      if rnd_num > 0.9:
      x = 'B'
      elif rnd_num > 0.8:
      x = 'C'
      else:
      x = 'A'

      return x


      ## fill categorical variable's missing value
      for i in range(df.shape[0]):
      if df['x1'].iloc[i] == '':
      df['x1'].iloc[i] = cat_fill_na()


      df

      x1
      0 A
      1 A
      2 C
      3 A <-- filled
      4 A
      5 B
      6 A
      7 B
      8 A
      9 A
      10 C
      11 A <-- filled
      12 A
      13 A
      14 A <-- filled
      15 A
      16 B
      17 A
      18 C
      19 A
      20 C <-- filled


      =================
      * 사족 *
      만약 아래의 코드처럼 apply(lambda: x...) 함수를 쓰게 되면 난수가 처음에 한번만 생성하고 그 난수에 의해 정해진 범주값으로 모든 결측치를 채우게 되므로 의도한 전처리 방법과는 맞지 않게 됩니다. 따라서 연산 부하가 있더라도 위의 코드처럼 for loop 반복문을 써서 매 값이 결측값(문자형이므로 NaN이 아니라 '' 일 경우 결측값으로 정의했음)일 경우마다 매번 난수를 발생시키도록 했습니다.

      def cat_fill_na(x):
      if x == '':
      rnd_int = random.randint(1, 10)
      if rnd_int == 9:
      x = 'B'
      elif rnd_int == 10:
      x = 'C'
      else:
      x = 'A'
      else:
      x = x

      return x


      df2 = df.apply(lambda x: cat_fill_na(x['x1']), axis=1)

    • 인블 2021.02.07 17:55  댓글주소  수정/삭제

      이러한 전처리방법이 따로 정의되어 있을줄 알았는데, 없나보네요.,, 직접 만들어 사용할줄은ㅋㅋ 감사합니다~ :D

    • R Friend Rfriend 2021.02.07 18:18 신고  댓글주소  수정/삭제

      네, 보통은 숫자형 변수에 대해서 결측값 처리를 하다보니, 범주형 변수에 대해서는 결측값 처리 함수가 따로 없는 것 같아서 사용자 정의함수로 만들었어요.

      댓글란에 코드를 옮기면 들여쓰기가 모두 망가져버려서 아래의 포스팅에 코드 옮겨놓았습니다.

      ==> https://rfriend.tistory.com/613

  7. 결측치 오류 2021.03.01 23:15  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 빈 공백을 가지고 있는 csv 파일을 변수에 넣고 출력해보니 NaN값이 나와서 이것을 공백 또는 0으로 만들어 주기 위해서 fillna 그리고 삭제를 위해 dropna 함수를 사용하였는데 둘 다 적용되지 않고 둘 다 nan 값이 그대로 있습니다. 어떤것이 문제일까요?

  8. AI결측치 2021.05.03 00:50  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    1. 혹시 그럼 결측치를 [탐색]하고

    그 결측치를 다른곳에서
    예를 들어서 결측치를 그냥 0 대체하는 것이나 선형보간 말고
    다른 머신러닝이나 딥러닝 알고리즘을 사용하여 구한 것을

    2. [대체]하는 코드를 쓰려면 혹시 방법이 있을까요?

    항상 좋은글 감사합니다

    • R Friend Rfriend 2021.05.05 01:00 신고  댓글주소  수정/삭제

      안녕하세요.
      답변이 늦어서 죄송합니다.

      아래의 블로그에 선형회귀모형의 예측값으로 pandas DataFrame 내 특정 변수의
      결측값을 대체하는 방법을 포스팅해놓았으니 참고하시기 바랍니다.

      https://rfriend.tistory.com/636