如何定义从数据框计算BMI的函数(Python)

时间:2019-05-30 12:53:19

标签: python

我需要定义一个函数,该函数将计算并返回数据框,该函数包括“ Height”和“ Weight”列(每一行的BMI)。 这是我写的代码:

import pandas as pd
def BMI(DataFrame):
    df=pd.DataFrame
    return df['Weight']/df['Height']^2

但是当我尝试使用以下命令运行该功能时:

data.apply(BMI,axis=1)

当“数据”是我的数据框时,

结果为错误:

Traceback (most recent call last): File "<input>", line 1, in <module> File "D:\Python Projects\venv\lib\site-packages\pandas\core\frame.py", line 6487, in apply return op.get_result() File "D:\Python Projects\venv\lib\site-packages\pandas\core\apply.py", line 151, in get_result return self.apply_standard() File "D:\Python Projects\venv\lib\site-packages\pandas\core\apply.py", line 257, in apply_standard self.apply_series_generator() File "D:\Python Projects\venv\lib\site-packages\pandas\core\apply.py", line 286, in apply_series_generator results[i] = self.f(v) File "<input>", line 3, in BMI TypeError: ("'type' object is not subscriptable", 'occurred at index 0')

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

偶然遇到这个,请注意BMI的正确公式是:

<块引用>

\BMI = \frac{WEIGHT_{kg}}{HEIGHT_{m}^{2}}

因此,

p = pd.DataFrame({'H': [1.83, 1.80], 'W': [70, 80]})
p.apply(lambda x: (x.W/(x.H**2)), axis=1)

产生的结果

0    20.902386
1    24.691358
dtype: float64

请注意公式分母中的附加括号,这些括号仅将平方项应用于以米为单位的高度(它们不是绝对必要的,但我添加了它们以强调哪个项是平方)。

可以在下面找到正确的公式 https://en.wikipedia.org/wiki/Body_mass_index

答案 1 :(得分:1)

您有一些语法错误,

第一个^2在python中不起作用,是**2,为什么要在函数中定义一个DataFrame

这应该有效:

p = pd.DataFrame({'H': [183, 180], 'W': [70, 80]})
p.apply(lambda x: (x.W/x.H)**2, axis=1)

Out[17]: 
0    0.146317
1    0.197531
dtype: float64