我需要定义一个函数,该函数将计算并返回数据框,该函数包括“ 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')
我的代码出了什么问题?
答案 0 :(得分:2)
偶然遇到这个,请注意BMI的正确公式是:
<块引用>因此,
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