Table of contents

    파이선의 Dataframe을 이용하여, 데이터를 가공하면서 NaN값이 생성되는 경우가 있다. 

     

    여러 라이브러리들을 활용할 때 NaN값이 있으면, 데이터 연산시 에러를 유발시킬 수도 있고 원인을 찾기가 어려우니 되도록이면 데이터 연산 전에 NaN 값을 처리하는 것이 좋다.

     

    아래는 야후 파이낸셜에서 테슬라 주식의 일봉 데이터들을 읽어들이고 출력하는 코드다.

    import pandas as pd
    import numpy as np
    import pandas_datareader as web
    
    getStockName = 'TSLA'
    myStartDate = '2017-12-28'
    myEndDate = '2020-12-29'
    
    df = web.DataReader(getStockName, data_source='yahoo', start=myStartDate, end=myEndDate)
    
    df

     

    Data열을 하나의 열로 설정하고 출력한다.

    df.reset_index(drop=False, inplace=True)
    df

     

    df 변수에 ‘mean’이라는 열을 만들고, 해당 열에 10개 값에 대한 평균을 만들어준다.

    df['mean'] = df['Close'].rolling(window=10).mean()

     

    10개의 값의 평균을 계산하기 때문에, 데이터가 10개 이상부터 값이 생성될 것이다. 

     

    그리고 10개이전의 값들은 NaN으로 저장되어 있으므로, NaN 값이 포함된 데이터들의 행을 삭제한다. 

     

    그 결과 는 아래의 표를 참조하자.

    df.dropna(axis=0)

     

    df 변수를 다시 출력해보면, NaN 값이 포함된 데이터가 그대로 저장되어 있음을 알 수 있다.

    df

     

     

    위의 문제를 해결하기 위해, dropna 함수의 파라미터 중 하나인 inplace True로 바꾸어 보고 출력해보자.

    df.dropna(axis=0, inplace=True)
    df

     

    df 변수에 원하는 NaN값이 없는 표를 완성시켰다. 그러나 인덱스 부분이 0부터 시작하지 않는 문제가 남아있다. 

     

    데이터를 가지고 무얼 하냐에 따라 다르겠지만, Dataframe의 인덱스를 가지고 반복문을 활용하다보면 아래와 같은 Dataframe은 오류를 유발시킬 확률이 높다.

     

    reset_index 함수를 활용하여 인덱스를 리셋시킨다.

    df.reset_index(drop=False, inplace=True)
    df

     

    인덱스가 잘 초기화 되어있으나, index라는 열이 추가되었다.  

     

    해당 열을 참조하지 않으면 큰 의미는 없겠지만, 가독성과 처리속도를 위해 삭제해보자.

    df.drop('index', axis=1, inplace=True)
    df