해결된 질문
작성
·
112
·
수정됨
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
저도 확인해보니 그렇네요 !
파이썬이 부동소수점 숫자는 정확하게 표현되지 않을 수 있어요
이로 인해 25.0과 24.9999999999와 같은 숫자가 같은 것으로 취급될 수 있어요~
실제로는 24.9999999999...라고 저장되어 있을 수 있어요.
추후 데이터를 변경하도록 하겠습니다.
일단 지훈님이 작성한 코드는 문제가 없어보입니다.