[英]Counting unique elements in sections of .csv columns (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文件中单个列的一部分中的唯一元素,而不是所有元素?
您需要跟踪每个地层已经看到的化石。 一个collections.defaultdict()
对象使编码变得最容易。 它为我们可以测试的每个编队set
了一set
:
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列中; 您没有在问题中指定如何提取化石名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.