Python 如何从我的文本文件中划分类别,并计算数字的平均值?
我正在做一项任务,但我被卡住了,不知道如何继续 我需要从第一行(来自txt文件)的不同类别中创建不同类别,并计算每个数值的平均值。当我在txt文件中添加新行时,该程序必须工作正常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;不
类别;通货不稳定;期间结束日;成交价格;公开价格;竞争的
音乐/电影/游戏;我们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位小数?通过手动打印平均值字典中的每个条目。如果你觉得我的答案有用,请考虑接受。看见