不使用熊猫分组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不使用熊猫分组相关的知识,希望对你有一定的参考价值。
我有一个csv文件,示例看起来像,
year product country
2018 food us
2018 drink uk
2019 food uk
2019 car japan
2018 food japan
我可以在不使用pandas或numpy之类的软件包的情况下按年份对信息进行分组吗?我知道我们可以先使用标准软件包csv
读取输入。
f = open('text.csv')
csv_f = csv.reader(f)
for row in csv_f:
////////
我的预期输出是,
year product product_sum
2018 food 2
2018 drink 1
2019 food 1
2019 car 1
有多种方法可以做到这一点。使用树或简单的字典。
此解决方案假定group by中的字段是相邻的。只需很少的更改,您就可以泛化或探索基于树的整洁解决方案。
f = open('text.csv')
delim = "\t"
header = f.readline()
group_dict =
for l in f.readlines():
key = delim.join(l.split()[:2])
if key not in group_dict:
group_dict[key] = 0
group_dict[key] +=1
f2 = open('output.txt','w')
f2.write(header)
for k,v in group_dict.items():
f2.write(delim.join([k,str(v)])+'\n')```
您可以使用collections.Counter
来计算出现的次数。
collections.Counter
要将其写回到CSV文件,您可以使用f = open('text.csv')
csv_f = csv.reader(f)
next(csv_f, None) # Ignore header row
c = collections.Counter((year, product) for year, product, country in csv_f)
print(c)
# Output: Counter(('2018', 'food'): 2, ('2018', 'drink'): 1, ('2019', 'food'): 1, ('2019', 'car'): 1)
和列表理解将其转回平面列表并使用.items()
进行写。
writerows
注意:对于Python 2,使用with open('output.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(('year', 'product', 'product_sum'))
writer.writerows([(key[0], key[1], value) for key, value in c.items()])
而不是iteritems()
。
以上是关于不使用熊猫分组的主要内容,如果未能解决你的问题,请参考以下文章