我在CSV文件中有以下数据集
[1,1,1,2,2,2,3,3,3,3,1,1,2]
现在我想通过比较它们并将它存储在数组中来计算每个值,但我不想要频率。所以我的输出应该是这样的:
[3,4,3,2,1]
我的代码如下:
import csv
with open("c:/Users/Niels/Desktop/test.csv", 'rb') as f:
reader = csv.reader(f, delimiter=';')
data = []
for column in reader:
data.append(column[0])
results = data
results = [int(i) for i in results]
print results
dataFiltered = []
for i in results:
if i == (i+1):
counter = counter + 1
dataFiltered.append(counter)
counter = 0
print dataFiltered
我的想法是通过比较细胞值。我知道结果的for循环有问题,但我无法弄清楚我的错误在哪里。我的想法是通过比较单元格值。也许
答案 0 :(得分:4)
我不会详细了解非常错误的循环细节,b[]
对于初学者来说不能是if i==(i+1):
。
接下来,您最好使用itertools.groupby
并总结一下这些群组的长度:
True
import itertools
results = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 1, 1, 2]
freq = [len(list(v)) for _,v in itertools.groupby(results)]
print(freq)
使用len(list(v))
强制对分组项进行迭代,以便我们可以计算长度(可能list
会更高效/更合适,我还没有采用这两种方法)
我明白了:
sum(1 for x in v)
除此之外:读取csv文件的第一列并将结果转换为整数可以通过以下方式实现:
[3, 4, 3, 2, 1]