>我在 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 in v)
会更高性能/更合适,我没有对这两种方法进行基准测试(
我得到:
[3, 4, 3, 2, 1]
旁白:读取 csv 文件的第一列并将结果转换为整数可以通过以下方式简单地实现:
results = [int(row[0]) for row in reader]