键列CSV文件python 3上的重复计数
我正在使用分隔文件。(CSV/管道分隔文件) 示例文件:键列CSV文件python 3上的重复计数,csv,python-3.x,duplicates,Csv,Python 3.x,Duplicates,我正在使用分隔文件。(CSV/管道分隔文件) 示例文件: Id,Name,Age 1,ads,23 2,dfg,24 2,hgh,25 3,fgh,26 4,fdfgh,27 4,fh,28 我必须在Id列上获取重复计数,并且还应创建单独的文件(重复)。应创建重复计数和包含重复项的文件 输出应该是 控制台:它应该像 ID : 2 is repeated 2 times 4 is repeated 2 times 输出文件应如下所示 ID: 2 is repeated 2 times 4
Id,Name,Age
1,ads,23
2,dfg,24
2,hgh,25
3,fgh,26
4,fdfgh,27
4,fh,28
我必须在Id列上获取重复计数,并且还应创建单独的文件(重复)。应创建重复计数和包含重复项的文件
输出应该是
控制台:它应该像
ID :
2 is repeated 2 times
4 is repeated 2 times
输出文件应如下所示
ID:
2 is repeated 2 times
4 is repeated 2 times
这是我的示例代码
import sys
import csv
import datetime
import time
import os from operator
import itemgetter from collections
import Counter
d = ','
read1 = csv.reader(open('D:\ANACONDS\example.csv','r'),delimiter=d)
sort_src = sorted(read1, key=itemgetter(0))
g = len(list(csv.reader(open('D:\ANACONDS\example.csv'))))
print("the number of records are :" ,g)
ids = Counter()
for row in sort_src:
ids += Counter([row[0]])
print(len(list(ids)))
任何帮助都将不胜感激。当您需要量化类别时,您可以使用直方图,您可以实现 使用简单的“dict”绘制直方图。每个类别(在您的案例中为“id”)都可以用来总结在您的文件中出现的频率。我希望下一段代码对您有所帮助
import csv
from operator import itemgetter
histogram = dict()
with open('yourfile.csv', 'r') as f:
csv_read = csv.reader(f, delimiter=',')
sort_src = sorted(csv_read, key=itemgetter(0))
print("The Number of records:", len(sort_src))
#
for row in sort_src:
if row[0].isdigit(): #Because you don't want to count headers
if row[0] in histogram:
histogram[row[0]] += 1
else:
histogram[row[0]] = 1
#
for item in sorted(histogram.items()):
print('ID {0} is repeated {1} times'.format(item[0], item[1]))
if __name__ == '__main__':
pass
运行所需输出的代码。
记录数量:7,
ID 1重复1次,
ID 2重复2次,
ID 3重复1次,
ID 4重复2次
顺便说一句,我在代码中看到了很多open和文件路径。您可以使用上下文管理器,该管理器允许使用更干净的代码,如果您不打算使用它们,则可以减少导入。若要仅查看重复项,请仅修改for循环块,如下所示:
for item in sorted(histogram.items()):
if(item[1] > 1):
print('ID {0} is repeated {1} times'.format(item[0], item[1]))
缩进在Python中很重要-请修复问题中的代码格式。另外,请提供您从代码中获得的示例输入的实际输出,以便与您想要的输出进行比较。谢谢..这就是我想要的。在上面的代码中,我们正在打印所有记录(包括重复记录和非重复记录)。我只想打印重复的ID,忽略不同的ID。关于这一点,请指导我?当然是的,您只需要修改最后一个“for循环”,方法是添加一个if as follow“if(item[1]>1):print('ID{0}重复了{1}次。format(item[0],item[1]),这是为了检查是否有超过1次的事件发生。我希望这个小小的修改能对你有所帮助。