Python嵌套循环更新fruit_dict录入每行价格均值结果不符合预期求助
问题排查与修复方案
核心错误点
- 键值对应逻辑错误:三层嵌套循环中,内层对行号
j的循环会覆盖所有键的赋值,最终所有键的值都会被改成最后一行的均值,完全没有建立fruit_j和第j行均值的对应关系。 - 可变对象引用问题:字典属于Python可变对象,直接将
fruit_dictappend到fruit_list时,存储的是字典的内存引用,后续修改字典会导致列表中所有已存入的字典同步更新,最终列表内全是完全相同的字典。 - 冗余循环逻辑:外层循环遍历列数
price.shape[1]属于无意义的重复操作,需求是按行计算均值,不需要遍历列维度。
修复后代码
如果你需要生成1行、5列的DataFrame,每列对应对应水果的行均值,可使用简化代码:
#!/usr/bin/python3 import numpy as np import pandas as pd price = np.array(range(20)).reshape(5,4) # 5行4列示例数据 fruit_keys = [f"fruit_{i}" for i in range(5)] # 简化键列表生成逻辑 # 直接按行生成键值对应字典 fruit_dict = {fruit_keys[j]: np.mean(price[j]) for j in range(price.shape[0])} # 转DataFrame时套一层列表,避免自动展开为列 fruit_df = pd.DataFrame([fruit_dict]) print(fruit_df)
如果你需要保留原代码逻辑,生成4行、5列的DataFrame,每行值均为行均值,只需要每次循环创建新字典避免引用复用即可:
#!/usr/bin/python3 import numpy as np import pandas as pd price = np.array(range(20)).reshape(5,4) fruit_keys = [f"fruit_{i}" for i in range(5)] fruit_list = [] for _ in range(price.shape[1]): # 每次循环创建独立新字典 fruit_dict = {fruit_keys[j]: np.mean(price[j]) for j in range(price.shape[0])} fruit_list.append(fruit_dict) fruit_df = pd.DataFrame(fruit_list) print(fruit_df)
内容的提问来源于stack exchange,提问作者Joaquim
相关产品推荐
相关产品推荐

