inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 파이썬 머신러닝 완벽 가이드

판다스 DataFrame의 변환, 컬럼 세트 생성/수정

drop의 inplace =True 값 적용하면 None이 나오는 이유?

2628

[SQL 실전반 8기]유니윤

작성한 질문수 9

0

안녕하세요.  인플레이스 적용후 반환값이 None이 나오는지 이해가 안되네요 ㅠㅠ 저는 데이터프레임 형태로 다시 나올줄 알았거든요.

none이 되는 이유 설명해주실 수 있나요??

그리고 None 에 대해 잘 모르겠습니다.

통계 머신러닝 배워볼래요? python

답변 1

0

권 철민

안녕하십니까,

질문해 주신 부분은 실제 코드 작성할때 많이 헷갈리는 부분입니다. 늘 의식을 하고 코드를 작성해야 합니다.

returned_df = org_df.drop(.., inplace=False) 와 같이 DataFrame의 주요 메소드들은 인자로 inplace를 가지며 default는 False 입니다.

잘 아시다시피 returned_df = org_df.drop(.., inplace=False) 와 같이 inplace=False이면 원본 DataFrame은 직접적으로 drop 변경하지 않으며 원본 DataFrame에서 데이터가 drop 된 새로운 DataFrame을 returned_df로 반환합니다. 즉 org_df를 copy 한 뒤 여기서 데이터를 Drop한 새로운 DataFrame이 메모리에 생성되고 returned_df는 이 DataFrame을 가지게 됩니다.  이렇게 하면 returned_df와 org_df 가 모두 메모리 상에 존재하게 되고 많은 메모리를 사용하게 됩니다.

Pandas는 데이터를 무조건 메모리에 올려야 합니다. 메모리가 꽉차면 더이상 메모리에 올릴 수 없습니다.

제 생각에 inplace=True는 이러한 부분을 감안하여 설계된 것 같습니다.

org_df.drop(.., inplace=True) 이면 메모리를 Copy하여 삭제하지 않고 원본 DataFrame의 메모리에 그대로 적용이 됩니다.  그리고 반환은 None을 합니다. None은 쉽게 얘기하면 아무런 값이 아니다는 것입니다. 메모리를 차지하지 않고 자바나 다른 언어의 Null과 마찬가지 입니다.  따라서 inplace=True를 설정할 때는 returned_df = org_df.drop(.., inplace=True)와 같은 식으로 코드를 작성하는 것은 회피해야 합니다. 반환된 returned_df는 None 이기 때문입니다. 

보통 코드 작성 시에는 가급적이면 inplace=False를 사용하는 것이 오히려 실수를 줄일 수 있습니다. returned_df = org_df.drop(.., inplace=False)와 같은 코드가 훨씬 더 직관적이고, 실수로 원본 DataFrame의 데이터를 잘못 삭제했을 경우도 대비할 수 있기 때문입니다.

또한 원본 데이터에 바로 적용할 때도 org_df = org_df.drop(.., inplace=False) 을 적용하면 됩니다. 이때는 반환된 org_df가 다시 새로운 DataFrame을 가리키기 때문에 원본 데이터에 바로 적용됩니다. 물론 과거에 org_df가 참조한 메모리는 더이상 아무도 참조하지 않기 때문에 파이썬의 메모리 가비지 콜렉터가 수행될 때까지는 여전히 메모리에 남아 있다는 단점이 있습니다만,  어느정도 메모리에 영향을 미치지 않는 적당한 크기의 DataFrame이라면 큰 문제가 생길 수 없습니다.

감사합니다.

안녕하세요 열심히 수강중인 학생입니다

0

63

2

정수 인덱싱

0

68

2

넘파이 오류

0

85

2

11강 numpy의 axis 축 질문 드립니다.

0

85

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

79

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

70

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

75

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

64

2

5강 강의 오류가 있어요.

0

84

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

72

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

69

3

파이썬 다운그레이 후 사이킷런 재설치

0

117

2

좋은 강의 감사합니다.

0

72

2

scoring 함수 음수값

0

67

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

100

2

분류 평가 정확도 예측

0

77

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

99

1

카카오톡 채널 있나요

0

107

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

189

2

pca 스케일링 관련하여 질문드립니다.

0

100

2

주피터 대신 구글 코랩

0

172

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

148

2

실루엣 스코어..

0

86

2

float64 null 값 처리 방법

0

103

2