You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写if判断语句判定列表遍历完成,计算数据集分类列熵值

熵计算循环逻辑修正方案

问题根因

你当前代码的核心逻辑错误是:将熵值追加到结果列表的逻辑放在了内层频次遍历循环中,且判断条件完全不符合需求。你用c_data_copy[l] == c_data_copy[len(c_data_copy) - 1]作为触发追加的条件,本质是判断「当前遍历到的频次值等于该列最后一个类别的频次值」,只要遍历过程中碰到和最后一个频次相等的数值(哪怕还没遍历完所有类别),就会提前把未计算完成的熵值加入列表,自然无法得到正确的全列熵结果。

修正逻辑

不需要额外的if判断,直接把熵值追加的逻辑移到内层频次遍历循环外部即可:内层循环走完就代表该列的所有类别频次都计算完成,此时的entropy就是该列的最终熵值,直接追加到结果列表即可。

修正后代码

import math

entropy_list =[]
# 提前定义数据集总行数,保证概率计算分母正确,如已定义可删除该行
row = len(avustralya_hava_data)
# 筛选分类列逻辑保持不变
categorical_data = [x for x in avustralya_hava_data.columns if avustralya_hava_data[x].dtypes == "O"]

for col in avustralya_hava_data[categorical_data].columns:
    c_data_copy = avustralya_hava_data[col].value_counts()  
    print(c_data_copy, "\n")
    print("******************")
    entropy = 0    
    # 遍历当前列所有类别计算熵值
    for l in range(len(c_data_copy)):
        p = (c_data_copy[l]/row)
        entropy += (-math.log(p,2)*(p))
        print(c_data_copy[l]," degeri icin entropi ","--->",entropy)
    # 内层循环结束,当前列熵计算完成,直接追加结果
    entropy_list.append(entropy)
    print("\n","Entropi list :" ,entropy_list, "\n")
    print("******************")

修改说明

  • 新增总行数计算逻辑,避免概率计算分母未定义的问题,如你之前已经定义过row变量可直接删除该行
  • 移除了错误的if判断逻辑,将结果追加操作放在内层循环结束后,保证只有全列熵计算完成后才会写入结果列表
  • 循环变量i重命名为col提升代码可读性,你可根据自己的习惯保留原名

内容的提问来源于stack exchange,提问作者Ege Pancaroğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:05