如何在python上检查csv文件中的频率?

2024-05-19 23:02:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个文件在.csv-20000记录或更多

基本上,这很容易——就像这样:

numer,produkt,date
202,produkt A its sad,20.04.2019
203,produkt A its sad,21.04.2019
204,produkt A its sad,22.04.2019
etc

我要打印信息:

“produkt A its sad”出现6次 “产品B”出现3次 “产品C”出现两次

基于另一个关于堆栈溢出的答案,我写道:

import csv
from collections import Counter

with open ('base2.csv', encoding="utf8") as csv_file:

    csv_reader = csv.reader(csv_file)

    produkt = [row[0] for row in csv_file]

    for (k,v) in Counter(produkt).items():
        print ("A %s appears %d times" % (k, v))

我是python的新手,所以这可能有点愚蠢:)

输出为:

A n appears 1 times
A 2 appears 11 times

Tags: 文件csvinimportfor产品counterreader
3条回答

我从csv_文件而不是csv_读取器中读取

所以produkt=[row[0]for row in csv_file]本质上是说从文件中读取每一行并存储为row,然后获取该行的第一个字符

我将csv_文件替换为csv_阅读器及其作品

感谢@chrisdoyle

produkt = [row[0] for row in csv_file]中,变量row是字符串类型,row[0]只是第0个字符。我已经用row.split(",")[1]替换了它,并得到了预期的答案

您的问题是,当您使用列表理解来构建产品列表时,您是从文件而不是CSV阅读器对象中读取的

produkt = [row[0] for row in csv_file]

表示读取文件的每一行,并将该行一次存储在变量名行中,然后从该行获取该行包含的字符串的第一个字符(索引0)

相反,假设您希望produkt是字段1,您应该将此行更新为

produkt = [row[1] for row in csv_reader]

虽然这也会读取标题行,但由于您有标题,我将使用dictReader并选择您感兴趣的列名,如:

csv_reader = csv.DictReader(csv_data)
produkts = [row['produkt'] for row in csv_reader]
for (k, v) in Counter(produkts).items():
    print("A %s appears %d times" % (k, v))

这样就可以清楚地知道你的计数是哪一列,而不必仅仅使用数字索引

相关问题 更多 >