解决Python Pandas中DataFrame嵌套循环索引重复遍历的问题
解决Pandas遍历DataFrame列取值时的重复索引问题
问题原因
你的代码出现重复遍历索引的核心问题是嵌套了不必要的三层循环:
- 最外层遍历DataFrame的列
- 中间层遍历当前列
value_counts()的索引(即各个类别) - 最内层遍历当前列
value_counts()的所有计数值
这会导致每个类别都会和所有计数值逐一配对输出,比如某列有3个类别,就会输出9行重复结果,而非预期的3行。
修正方案1:简化循环(保留迭代逻辑)
直接同时遍历value_counts()的索引和对应计数值,避免内层多余循环:
total_data = len(data_high) for column in data_high: data_type = data_high[column].value_counts() # 同时迭代类别(索引)和对应的计数 for category, count in data_type.items(): percentage = round((count / total_data) * 100, 2) print(f"{column}: {category} - {percentage}%")
修正方案2:用Pandas原生方法(更高效简洁)
利用value_counts(normalize=True)直接计算占比,无需手动循环计算:
for column in data_high: # normalize=True 返回相对频率,乘100转为百分比并保留两位小数 percentage_df = data_high[column].value_counts(normalize=True).mul(100).round(2) print(f"=== {column} 类别占比 ===") print(percentage_df) print()
这种方法不仅避免了循环错误,还能利用Pandas的向量化运算提升效率,尤其适合大数据集。
内容的提问来源于stack exchange,提问作者Riswan Gani Padilah
相关产品推荐
相关产品推荐

