【问题标题】:Duplicate Count on key column CSV file python 3重复计数关键列CSV文件python 3
【发布时间】:2014-10-26 20:12:46
【问题描述】:

我有分隔文件。(CSV/PIPE 分隔文件)

示例文件:

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)))

任何帮助将不胜感激。

【问题讨论】:

  • 缩进在 Python 中很重要 - 请修正您问题中的代码格式。此外,请提供您从代码中获得的示例输入的实际输出,以便可以将其与您想要的输出进行比较。

标签: csv python-3.x duplicates


【解决方案1】:

当你需要量化类别时,你可以使用直方图,你可以实现 使用简单的 '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 次,

顺便说一句,我在您的代码中看到了很多打开的文件和文件的路径。您可以使用上下文管理器,它允许拥有更简洁的代码,并在您不打算使用它们时减少导入。

【讨论】:

  • 谢谢你..这就是我要找的。在上面的代码中,我们正在打印所有记录(重复和非重复)。我只想打印重复的 ID,忽略不同的 ID。请指导我这件事?
  • 当然可以,你唯一需要做的就是修改最后一个'for循环',添加一个if如下'if(item[1] > 1): print('ID {0 } 重复 {1} 次 '.format(item[0], item[1]))' 这是为了检查你是否有超过 1 的出现。希望这个小修改对你有所帮助。
【解决方案2】:

要只看到重复的项目,只需修改 for 循环块如下:

for item in sorted(histogram.items()):
    if(item[1] > 1):
        print('ID {0} is repeated {1} times'.format(item[0], item[1]))

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2012-07-14
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2019-02-23
    • 2020-04-09
    相关资源
    最近更新 更多