如何在字典列表中新增BMI列并计算平均值?Pandas数据处理求助
问题解决:计算BMI并整理数据
问题需求
基于给定的人员数据,为每行计算BMI指数(公式:berat / tinggi),将BMI列放在berat列右侧,并计算所有行的BMI平均值。
原始数据:
data = [{'nama': 'Senpai', 'tinggi': 1.55, 'berat': 63.41}, {'nama': 'Yui Rio', 'tinggi': 1.53, 'berat': 61.17}, {'nama': 'Yuna Hina', 'tinggi': 1.62, 'berat': 70.98}, {'nama': 'Koharu Hinata', 'tinggi': 1.77, 'berat': 53.45}, {'nama': 'Mei Mio', 'tinggi': 1.58, 'berat': 67.81}, {'nama': 'Saki Miyu', 'tinggi': 1.57, 'berat': 68.12}, {'nama': 'Kokona Haruka', 'tinggi': 1.76, 'berat': 61.96}, {'nama': 'Haruto Yuto', 'tinggi': 1.52, 'berat': 64.89}, {'nama': 'Sota Yuki', 'tinggi': 1.62, 'berat': 56.73}, {'nama': 'Hayato Haruki', 'tinggi': 1.68, 'berat': 69.07}, {'nama': 'Ryusei Koki', 'tinggi': 1.66, 'berat': 53.02}, {'nama': 'Sora Sosuke', 'tinggi': 1.5, 'berat': 55.89}, {'nama': 'Riku Soma', 'tinggi': 1.62, 'berat': 78.24}]
用户尝试的错误代码:
data_array = pd.DataFrame(data) imt = data_array['berat']/data_array['tinggi'] tes = list(imt) join_list = data + tes join_list_array = pd.DataFrame(join_list) print(join_list_array)
错误原因
data是字典组成的列表,tes是数值列表,直接用+会将两个列表拼接,导致后半部分元素是单独的数值,无法正确生成包含BMI列的DataFrame。
正确实现方法
方法1:使用Pandas直接处理(推荐)
Pandas支持直接添加列,并可调整列顺序,步骤如下:
import pandas as pd # 1. 转换为DataFrame data_df = pd.DataFrame(data) # 2. 计算BMI并添加为新列 data_df['BMI'] = data_df['berat'] / data_df['tinggi'] # 3. 调整列顺序,将BMI放到berat右侧 cols = ['nama', 'tinggi', 'berat', 'BMI'] data_df = data_df[cols] # 4. 计算BMI平均值 bmi_avg = data_df['BMI'].mean() # 输出结果 print(data_df) print(f"\nBMI平均值: {bmi_avg:.2f}")
方法2:处理原始字典列表
如果需要先修改原始字典再转成DataFrame,可遍历每个字典添加BMI键:
import pandas as pd # 遍历每个字典,添加BMI字段 for person in data: person['BMI'] = person['berat'] / person['tinggi'] # 转换为DataFrame并调整列顺序 data_df = pd.DataFrame(data)[['nama', 'tinggi', 'berat', 'BMI']] # 计算平均值 bmi_avg = data_df['BMI'].mean() print(data_df) print(f"\nBMI平均值: {bmi_avg:.2f}")
两种方法都能得到结构正确的结果,且BMI列位于berat右侧,同时计算出所有行的BMI平均值。
内容的提问来源于stack exchange,提问作者lokalhangatt
相关产品推荐
相关产品推荐

