繁体   English   中英

使用python在CSV文件的列中查找最常用的值

[英]Using python to find the most common value(s) in the column of CSV file

for each in column_names:
    print each + ':'
    for L in range(1,len(row_list)):
        each_column = columns[each][L]
        for i in each_column:
            if i == i.index(i)+1:
                count+=1
                mode=i

上面的代码是我尝试在csv文件的列中查找最常用的值。 代码不完整,为了解决这个问题,我被困了几个小时。

我对python还是很陌生,即使语法我也不熟悉。 所有帮助将不胜感激。

这段代码可以解决问题

  import csv
  from collections import Counter
  filename='test.csv'
  with open(filename, 'r') as f:
      column = (row[0] for row in csv.reader(f))
      print("Most frequent value: {0}".format(Counter(column).most_common()[0][0]))

首先,它打开您的文件,然后创建一个生成器表达式以检索csv中的第一列。

未将其列出的原因是csv可能很长,这可能会导致内存问题。 使用时,生成器会“生成”该项目。

然后,它使用collections.Counter对象对列表中最常见的值进行计数,并获取第一个元素的值。 您可以逐步尝试代码以查看每个步骤的输出。

当您实际上需要分别对每个值进行计数时,只使用一个count变量。 因此,尽管您的总体方法相当不错,但要遍历似乎是从CSV文件填充的字典,但您需要设置另一个字典来保存每个值的计数。 由于您不能使用collections.Countercollections.defaultdict任何一种不错的方法,因此您可以执行以下操作

counts = {}
for each in column_names:
    count = {}
    print each + ':'
    for row in columns[each]:
        count[row] = count.get(row,0) + 1
    counts[each] = count

之后,您将获得一个字典counts ,每个column_name都有一个条目,其中包含该列中的所有值作为键,其计数作为值。 现在,您只需要按值对它们进行排序并输出n个最常见的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM