我在 CSV 文件中有以下数据集
[1, 1, 1, 2, 2, 2, 2, 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 循环有问题,但我不知道我的错误在哪里。我的想法是通过比较单元格值。也许
最佳答案
我不会详细介绍你的循环,它非常是错误的,if i==(i+1):
不能是 True
对于初学者。
接下来,您最好使用 itertools.groupby
并对组的长度求和:
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在 v)
中会更高效/更合适,我没有对这两种方法进行调整)
我得到:
[3, 4, 3, 2, 1]
旁白:读取 csv 文件的第一列并将结果转换为整数可以简单地通过以下方式实现:
results = [int(row[0]) for row in reader]
关于python - 比较单元格值 csv 文件 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43250045/