L1123829432 2021-05-03 09:16 采纳率: 100%
浏览 1066
已采纳

python运行成功,不显示结果

import pandas as pd
import numpy as np
import math
from numpy import array
 
# 1读取数据
df = pd.read_csv('对比表.csv')
# 2数据预处理 ,去除空值的记录
df.dropna()
 
#定义熵值法函数
def cal_weight(x):
    '''熵值法计算变量的权重'''
    # 标准化
    x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))
 
    # 求k
    rows = x.index.size  # 行
    cols = x.columns.size  # 列
    k = 1.0 / math.log(rows)
 
    lnf = [[None] * cols for i in range(rows)]
 
    # 矩阵计算--
    # 信息熵
    # p=array(p)
    x = array(x)
    lnf = [[None] * cols for i in range(rows)]
    lnf = array(lnf)
    for i in range(0, rows):
        for j in range(0, cols):
            if x[i][j] == 0:
                lnfij = 0.0
            else:
                p = x[i][j] / x.sum(axis=0)[j]
                lnfij = math.log(p) * p * (-k)
            lnf[i][j] = lnfij
    lnf = pd.DataFrame(lnf)
    E = lnf
 
    # 计算冗余度
    d = 1 - E.sum(axis=0)
    # 计算各指标的权重
    w = [[None] * 1 for i in range(cols)]
    for j in range(0, cols):
        wj = d[j] / sum(d)
        w[j] = wj
        # 计算各样本的综合得分,用最原始的数据
    
    w = pd.DataFrame(w)
def main():
       print(w)
 

  • 写回答

5条回答 默认 最新

  • CSDN专家-HGJ 2021-05-03 11:21
    关注

    代码运行不出结果的主要原因,一是计算权重的函数没有返回结果,二是没有调用main()函数,三是没有传递参数给计算权重函数。这样改一下:

    import pandas as pd
    import numpy as np
    import math
    from numpy import array
    
    def cal_weight(x):
        #熵值法计算变量的权重
        # 标准化
        x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))
    
        # 求k
        rows = x.index.size  # 行
        cols = x.columns.size  # 列
        k = 1.0 / math.log(rows)
    
        lnf = [[None] * cols for i in range(rows)]
    
        # 矩阵计算--
        # 信息熵
        # p=array(p)
        x = array(x)
        lnf = [[None] * cols for i in range(rows)]
        lnf = array(lnf)
        for i in range(0, rows):
            for j in range(0, cols):
                if x[i][j] == 0:
                    lnfij = 0.0
                else:
                    p = x[i][j] / x.sum(axis=0)[j]
                    lnfij = math.log(p) * p * (-k)
                lnf[i][j] = lnfij
        lnf = pd.DataFrame(lnf)
        E = lnf
    
        # 计算冗余度
        d = 1 - E.sum(axis=0)
        # 计算各指标的权重
        w = [[None] * 1 for i in range(cols)]
        for j in range(0, cols):
            wj = d[j] / sum(d)
            w[j] = wj
            # 计算各样本的综合得分,用最原始的数据
    
        w = pd.DataFrame(w)
        #返回计算结果
        return w
    
    def main():
        # 1读取数据
        df = pd.read_csv('usc_state_2021.csv')
        # 2数据预处理 ,去除空值的记录
        df.dropna()
        #获取需计算的数值列
        df = df.iloc[:, [1, 2, 3]]
        #调用熵值法计算权重函数
        w = cal_weight(df)
        #打印输出结果
        print(w)    
    main()
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题