데이터프레임 관련 함수를 define 했는데, 실제 데이터가 바뀌지 않습니다.

조회수 314회

판다스 데이터프레임에서, 어떤 column의 값이 nan 뜨면 그 아랫줄 전부 삭제하기 위해 함수를 만들었습니다.

def shorter(df,column):

    for i in range(len(df)):
        if pd.isna(df[column])[i] == True:
           df = df.loc[0:i-1]
           break          

이렇게 하고, df에 해당 데이터프레임 넣고 돌렸는데, 실제 데이터프레임엔 변화가 일어나지 않습니다.

예를 들어 데이터프레임 이름을 df2022(함수에 넣기 전에 이미 정의 완료), column name을 '판정' 이라고 한다면

shorter(df2022, '판정')을 해도

df2022가 바뀌지 않습니다. 왜 이러는걸까요? 실제 데이터를 바꾸는 결과를 얻고 싶습니다.

  • 아 그리고 리스트는 이렇게 함수를 적용하면 바뀌는데, 리스트는 원래 그런건가요?? 윤현식 2022.7.21 22:33

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기
    df = df.loc[0:i-1]
    

    여기서 일어나는 일은, df 자체를 변경하는 것이 아니고, df.loc[0:i-1] 을 새롭게 만들어서, df 라는 이름에 지정하는 겁니다. 이 때 새롭게 만들어진 df 는 함수 밖의 df 와는 상관이 없게 됩니다. 그래서 변경이 되지 않아요.

    def shorter(df,column):
        for i in range(len(df)):
            if pd.isna(df[column])[i] == True:
               return df.loc[0:i-1]
        return df
    
    
    
    df2022 = shorter(df2022, "판정")
    
    

    이렇게 하면 될 것 같습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)