计算.csv列部分中的唯一元素(Python)

2024-05-15 22:09:44 发布

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

我有一个.csv文件的地质构造和每一个地层的化石物种的出现。在.csv文件中,每个化石都有自己的行,其中包括地层名称。在

我在下面写的代码可以很好地打印出地层出现的次数。在

import csv
from collections import Counter

out=open("BivalviaGRDWIS.csv", "rb")
data=csv.reader(out)
data.next()
data=[row for row in data]
out.close()

formations = [] 

for row in data:
    if row[13]=='':
        continue
    else:       
        formations.append(row[13])

print Counter(formations)

然而,可能会有重复的化石名称,这将破坏计数;我只想知道每一个地层的独特化石的数量。我可以添加什么来计算.csv文件中单个列的一个部分中的唯一元素,而不是所有元素?在


Tags: 文件csvinimport名称元素fordata
1条回答
网友
1楼 · 发布于 2024-05-15 22:09:44

你需要记录你已经看到的每一个地层的化石。{A{a1}我们可以通过编码来防止

import csv
from collections import Counter, defaultdict

FOSSIL = 0   # fossil name is the first column (?)
FORM   = 13  # formation is the 14th column

with open("BivalviaGRDWIS.csv", "rb") as inputfile:
    data = csv.reader(inputfile)
    next(data)  # skip header

    seen = defaultdict(set)

    counts = Counter(
        row[FORM]
        for row in data
        if row[FORM] and row[FORM] not in seen[row[FOSSIL]] and not seen[row[FOSSIL]].add(row[FORM])
    )

print counts

上面的代码在一个生成器表达式中将CSV行直接“流化”到Counter()对象中;不保留中间数据。在

每行测试:

  • 注意编队列不是空的
  • 注意到这个化石的构造还没有被记录下来
  • 记录下给定化石的构造

我假设化石名称在第0列;您在问题中没有指定如何提取化石名称。在

相关问题 更多 >