制作不含熊猫的频率表时值不正确

时间:2019-06-11 08:59:17

标签: python python-2.7

我尝试制作了一个频率表,该频率表以百分比形式返回频率。并具有显示表格的功能。所有的值都显示为零,并且百分比计算存在错误

我尝试更改变量名称,还尝试对百分比进行硬编码,但是在制作表/字典时存在一些问题

def freq_table(dataset, index):
    table_1 = {}
    total = 0

    for row in dataset:
        total += 1
        value = row[index]
        if value in table_1:
            table_1[value] += 1
        else:
            table_1[value] = 1

    table_percentages = {}
    for key in table_1:
        percentage = (table_1[key] / total) * 100
        table_percentages[key] = percentage 

    return table_percentages


def display_table(dataset, index):
    table_2 = freq_table(dataset, index)
    table_display = []
    for key in table_2:
        key_val_as_tuple = (table_2[key], key)
        table_display.append(key_val_as_tuple)

    table_sorted = sorted(table_display, reverse = True)
    for entry in table_sorted:
        print(entry[1], ':', entry[0])


display_table(ios_final, 12)

显示类似

的值
('Weather', ':', 0)
('Utilities', ':', 0)
('Travel', ':', 0)
('Sports', ':', 0)
('Social Networking', ':', 0)
('Shopping', ':', 0)
('Reference', ':', 0)
('Productivity', ':', 0)
('Photo & Video', ':', 0)
('News', ':', 0)
('Navigation', ':', 0)
('Music', ':', 0)

2 个答案:

答案 0 :(得分:0)

您正在使用Python 2,其中将两个整数相除会得到一个整数:

>>> 1/3, 2/3, 3/3, 4/3, 5/3, 6/3
(0, 0, 1, 1, 1, 2)

这里也发生同样的事情:

percentage = (table_1[key] / total) * 100

如果table_1[key] < total,则除法结果将为

您应将其中之一转换为浮点数:

total = float(calculate total here)

或者执行total = 0.0,然后在循环中将其递增。

涉及浮点数的除法会导致浮点数:

>>> 1/3., 2/3., 3/3., 4/3., 5/3., 6/3.
(0.3333333333333333, 0.6666666666666666, 1.0, 1.3333333333333333, 1.6666666666666667, 2.0)

答案 1 :(得分:0)

或者使用from __future__ import division,您的代码应按原样工作。