我刚刚将.csv文件中的值导入到列表列表中,现在我需要知道有多少不同的用户。该文件本身似乎如下:
[['123', 'apple'], ['123', 'banana'], ['345', 'apple'], ['567', 'berry'], ['567', 'banana']]
基本上,我需要知道有多少不同的用户(每个子列表中的第一个值是用户ID)(在这种情况下3
,在进行一些Excel过滤后超过6,000),以及什么是食物本身的频率:{'apple': 2, 'banana': 2, 'berry': 1}
。
以下是我尝试用于不同值计数的代码(使用Python 2.7):
import csv
with open('food.csv', 'rb') as food:
next(food)
for line in food:
csv_food = csv.reader(food)
result_list = list(csv_follows)
result_distinct = list(x for l in result_list for x in l)
print len(result_distinct)
答案 0 :(得分:0)
使用[i[0] for x in result_list]
获取所有ID的列表。然后创建一个set
,即该列表中所有唯一项的列表。然后,集合的长度将为您提供唯一用户的数量。
len(set([i[0] for x in result_list]))
答案 1 :(得分:0)
这就是Counter
的全部内容:
import csv
from collections import Counter
result_list = []
with open('food.csv', 'rb') as food:
next(food)
for line in food:
csv_food = csv.reader(food)
result_list += list(csv_follows)
result_counter = Counter(x[1] for x in result_list)
print len(result_counter)
Counter
是一个特殊字典。在字典内部,字典将包含{'apple': 2, 'banana': 2, 'berry': 1}
,因此您可以使用其计数检查所有元素。 len(result_counter)
将提供不同元素的数量,而sum(result_counter.values())
将提供元素总数)。
编辑:显然您想要计算不同 用户的数量。你可以这样做:
len({x[0] for x in result_list})
{.. for x in result_list}
是设置理解。
答案 2 :(得分:0)
要获取不同的用户,您可以使用集合:
result_distinct = len({x[0] for x in result_list})
频率,您可以使用collections.Counter
:
freqs = collections.Counter([x[1] for x in result_list])
答案 3 :(得分:0)
对于第一个问题,请使用set
,
import operator
lists = [['123', 'apple'], ['123', 'banana'], ['345', 'apple'], ['567', 'berry'], ['567', 'banana']]
nrof_users = len(set(map(operator.itemgetter(0), lists)))
print(nrof_users)
# 3
对于第二个问题,请使用collections.Counter
,
import collections
import operator
result = collections.Counter(map(operator.itemgetter(1), lists))
print(result)
# Counter({'apple': 2, 'banana': 2, 'berry': 1})