我有一个数据框,其中包含一个名为bmi(身体质量指数)的列,该列包含int值
我必须根据这些值将bmi列中的值分为体重不足,正常,体重超重和肥胖。下面是相同的循环
但是我遇到一个错误。我是初学者。两周前才开始编码。
答案 0 :(得分:0)
通常来说,在熊猫中使用for循环通常是个坏主意。熊猫使您可以轻松地操作数据。例如,如果要按某些条件进行过滤:
print(df[df["bmi"] > 30])
将在bmi>30
处打印所有行。它的工作方式如下:df[condition]
。在这种情况下,条件是“ bmi”大于30,因此我们的条件是df["bmi"] > 30
。注意,行df[df["bmi"] > 30]
返回满足条件的所有行。我打印了它们,但是您可以随心所欲地对其进行操作。
即使这是一个不好的技术(或仅用于特定需求),您当然也可以遍历数据框。由于df是数据帧对象,因此无法通过for l in df
完成此操作。要遍历它,您可以使用iterrows:
for index, row in df.iterrows():
if (row["bmi"] > 30)
print("Obese")
也请下次提供内联代码。不要粘贴图片
如果您的目标是分成不同的标签,我建议以下几点:
df.loc[df[df["bmi"] > 30, "NewColumn"] = "Obese"
df.loc[df[df["bmi"] < 18.5, "NewColumn"] = "Underweight"
.loc
运算符使我只能操纵部分数据。格式为[行,列]。因此,上面的代码在bmi> 30的行上进行处理,并且仅使用“ NewColumn”(根据需要进行更改)这是一个新列。它将值放在此列的右侧。这样,完成该操作后,您的数据框中就会有一个新列,您可以根据需要选择“肥胖/体重不足”。
附带说明-映射值有更好的方法(例如pandas的map
等),但是如果您是初学者,在深入研究更复杂的方法之前,请务必先了解操作数据的简单方法,这一点很重要。这就是为什么我避免解释更复杂的方法
答案 1 :(得分:0)
首先,如评论中所述,您应该张贴文本/代码而不是屏幕截图。
您可以在大熊猫中进行分箱:
bmi_labels = ['Normal', 'Overweight', 'Obese']
cut_bins = [18.5, 24.9, 29.9, df["bmi"].max()]
df['bmi_label'] = pd.cut(df['bmi'], bins=cut_bins, labels=bmi_labels)
在这里,我创建了一个单独的列(bmi_label)来存储标签,但是您也可以在同一列(bmi)中进行保存。