Python 如何从我的文本文件中划分类别,并计算数字的平均值?

Python 如何从我的文本文件中划分类别,并计算数字的平均值?,python,Python,我正在做一项任务,但我被卡住了,不知道如何继续 我需要从第一行(来自txt文件)的不同类别中创建不同类别,并计算每个数值的平均值。当我在txt文件中添加新行时,该程序必须工作正常 类别;通货不稳定;期间结束日;成交价格;公开价格;竞争的 音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不 音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不 音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不 音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不

我正在做一项任务,但我被卡住了,不知道如何继续

我需要从第一行(来自txt文件)的不同类别中创建不同类别,并计算每个数值的平均值。当我在txt文件中添加新行时,该程序必须工作正常

类别;通货不稳定;期间结束日;成交价格;公开价格;竞争的
音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不
音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不
音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不
音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不
音乐/电影/游戏;我们3249;5.周一;0,01;0,01;不
音乐/汽车/游戏;我们3249;5.周一;0,01;0,01;不
音乐/汽车/游戏;我们3249;5.周一;0,01;0,01;不
这是文本文件。我试着把它们分成不同的类别,但我不知道我是否做得正确,也不知道如何让Python知道他必须计算1组中的所有数字

with open('bijlage2.txt') as bestand:
    maak_er_lists_van = [(line.strip()).split(';') for line in bestand]
keys = maak_er_lists_van[0]
lijst = list(zip([keys]*len(maak_er_lists_van[1:]),
maak_er_lists_van[1:]))
x = [zip(i[0], i[1]) for i in lijst]
maak_dict = [dict(i) for i in x]


for i in maak_dict:
    categorieen =[i['Category'], i['currency'], i['sellerRating'],
i['Duration'], i['endDay'], i['ClosePrice'], i['OpenPrice'],
i['Competitive?']]
    categorieen = list(map(int, categorieen))

这就是我目前所拥有的。我是Python初学者,所以整个文本文件对我来说都是新的。有人能帮助我或解释我必须做什么,以便我能在这个项目上进一步工作吗?非常感谢

在我看来,阅读文件和创建包含类别和值的词典的方式都很好。您的列表
maak_dict
每行包含一个词典。要计算一个类别的平均值,可以执行以下操作:

def calc_average(categ):
    values = [i[categ] for i in maak_dict]
    average = sum(values)/len(values)
    return average
假设您要计算平均值<代码>类别必须是字符串

之后,您可以创建一个包含所有平均值的新词典:

new_dict = {}
for category in maak_dict[0].keys():
    avg = calc_average(category)
    new_dict[category] = avg

我会这样做的。我必须使用
locale.atof()
添加,因为我所在的位置
用作小数点,而不是逗号。您可能必须按指示更改此设置

csv
模块用于读取文件,并通过两步过程计算平均值。首先对每个类别的值进行求和,然后根据读取的值的数量计算每个类别的平均值

import csv
import locale
from pprint import pprint, pformat

import locale
#locale.setlocale(locale.LC_ALL, '')  # empty string for platform's default settings
# Following used for testing to force ',' to be considered as a decimal point.
locale.setlocale(locale.LC_ALL, 'French_France.1252')

avg_names = 'sellerRating', 'Duration', 'ClosePrice', 'OpenPrice'
averages = {avg_name: 0 for avg_name in avg_names}  # Initialze.

# Find total of each category of interest.
num_values = 0
with open('bijlage2.txt', newline='') as bestand:
    csvreader = csv.DictReader(bestand, delimiter=';')
    for row in csvreader:
        num_values += 1
        for avg_name in avg_names:
            averages[avg_name] += locale.atof(row[avg_name])

# Calculate average of each summed value.
for avg_name, total in averages.items():
    averages[avg_name] = total / num_values

print('raw results:')
pprint(averages)

print()  # Formatted output
print('Averages:')
for avg_name in avg_names:
    rounded = locale.format_string('%.2f', round(averages[avg_name], 2),
                                   grouping=True)
    print('  {:<13} {:>10}'.format(avg_name, rounded))

你的文本文件中真的有那些空行吗?那么,你想计算一个类别的所有值的平均值,比如说所有行的所有
'sellerRating'
值,还是一行的所有值的平均值?文件中没有空行,我想计算一个类别的所有值的平均值,比如“Sellerating”。如何去掉括号并将数字四舍五入到2位小数?通过手动打印
平均值
字典中的每个条目。如果你觉得我的答案有用,请考虑接受。看见