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可能很长,这可能会导致内存问题。生成器会在您使用项目时"生成"该项目。
然后它使用集合。计数器对象,用于计算列表中最常见的值并获取第一个元素的值。您可以逐步尝试代码以查看每个步骤的输出。
当您实际需要单独计算每个值时,您只使用一个count
变量。因此,虽然您的整体方法非常好,但遍历您似乎已从 CSV 文件填充的字典,但您需要设置另一个字典来保存每个值的计数。由于您不能使用collections.Counter
或collections.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个最常见的值。