해결된 질문
작성
·
315
1
문제1에서 df = df[:int(len(df) * 0.7)] 부분을
df = df.loc[:int(len(df) * 0.7)] 로 코딩했더니 답이 다르게 나옵니다. loc는 인덱스가 50이 있는 행까지만 출력되기에 70%의 데이터개수를 할때는 loc가 부적합한건가요?
문제2에서 df = df.dropna(subset=['f1']) 부분을 저는 df = df['f1'].dropna() 라고 코딩했더니 df.shape이 (69,) 로 나옵니다. df = df['f1'].dropna() 이건 해당 컬럼에 결측치가 있는 행을 삭제하는게 아닌가요?
답변 1
2
loc는 iloc와 달리 마지막 인덱스를 포함하고 있어요! 50을 포함하고 있습니다. 만약 사용한다면 index가 순서대로 있다는 가정을 두고 int(len(df) * 0.7)-1이 되겠네요!! 인덱스가 순서대로가 아닐 수도 있어 숫자일땐 iloc활용을 추천합니다.
다른 코드입니다. df.dropna(subset=['f1'])는 df 전체 데이터 프레임을 대상으로 결측값(행)삭제가 됩니다. df['f1'].dropna()는 'f1'컬럼 에서 결측값 삭제한 후 시리즈를 반환합니다.