인프런 커뮤니티 질문&답변

최지훈님의 프로필 이미지

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

5회 기출유형(작업형1)

섹션14 5회 기출문제 작업형 1-2 질문

해결된 질문

24.06.19 07:47 작성

·

82

·

수정됨

0

안녕하세요, 5회 작업형 1-2 질문입니다.

아래와 같이, cond 변수를 만들어주고,

변수들을 내림차순 정렬 해봤는데요.

아래 구문 그대로 실행 시 '과체중 또는 위험체중' 조건에서 bmi가 25.0000인 row가 출력됩니다.

 

과체중 또는 위험체중 :
      Gender  Height  Weight  Height(m)        bmi
7841  Female   157.0    56.7      1.570  23.002962
5311  Female   154.2    54.7      1.542  23.004806
8467  Female   159.6    58.6      1.596  23.005509
8304  Female   159.6    58.6      1.596  23.005509
6165  Female   155.6    55.7      1.556  23.005730
...      ...     ...     ...        ...        ...
7126  Female   151.8    57.6      1.518  24.996485
9661  Female   164.2    67.4      1.642  24.998479
903     Male   172.4    74.3      1.724  24.998520
9473  Female   160.5    64.4      1.605  24.999757
5355  Female   160.0    64.0      1.600  25.000000

 

조건에서 25 미만으로 당연히 걸러질거라 생각했는데.

리스트에 들어갔고, 실제로 정답은 맞습니다.

이 경우는 무슨 경우인가요?

 

import pandas as pd
df = pd.read_csv("5-2bmi.csv")
# your code
df['Height(m)'] = df['Height'] / 100
df['bmi'] = df['Weight'] / (df['Height(m)'] ** 2)
# print(df.info())
# print(df.head())
# 정상체중
cond1 = df['bmi'] >= 18.5
cond2 = df['bmi'] < 23

# 위험체중
cond3 = df['bmi'] >= 23
cond4 = df['bmi'] < 25
# bmi 정상 사람수 : 1986

# print((df[cond1 & cond2].sort_values('bmi', ascending=True)))
a = len(df[cond1 & cond2].sort_values('bmi', ascending=True))
# print(len(df[cond1 & cond2].sort_values('bmi', ascending=True)))
# bmi 위험체중 사람수 : 2130

print('과체중 또는 위험체중 :') 
print(df[cond3 & cond4].sort_values('bmi', ascending=True)) # ★ 

b = len(df[cond3 & cond4].sort_values('bmi', ascending=True))
# print(len(df[cond3 & cond4].sort_values('bmi', ascending=True)))
print(int(abs(a-b)))

# 144

 

답변 1

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

2024. 06. 19. 17:50

저도 확인해보니 그렇네요 !

파이썬이 부동소수점 숫자는 정확하게 표현되지 않을 수 있어요

이로 인해 25.0과 24.9999999999와 같은 숫자가 같은 것으로 취급될 수 있어요~

실제로는 24.9999999999...라고 저장되어 있을 수 있어요.

 

추후 데이터를 변경하도록 하겠습니다.

일단 지훈님이 작성한 코드는 문제가 없어보입니다.