데이터프레임 관련 함수를 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가 바뀌지 않습니다. 왜 이러는걸까요? 실제 데이터를 바꾸는 결과를 얻고 싶습니다.
1 답변
-
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, "판정")
이렇게 하면 될 것 같습니다.
댓글 입력