你好,我的一些 python 遇到了问题。我正在尝试编写一个程序来接收 csv 文件并告诉我列中出现次数最多的 50 个单词。 我的 csv 文件遵循以下格式: ID、城市、州、酒店名称、价格 1,亚特兰大,佐治亚州,皇家酒店,200
例如,我想浏览此列表并告诉我 50 个最常见的城市。 我的代码:
def count_amount(fin_name):
with open(fin_name, 'rb') as fin:
reader = csv.reader(fin)
next(reader)
sortedlist = sorted(reader, key=operator.itemgetter(1), reverse=False)
d = defaultdict(list)
for row in sortedlist:
print(row[0], row[1], row[2], row[3], row[4])
if row[1] != 'City':
d[row[1]].append(float(row[3]))
for k,v in d.iteritems():
c = Counter(k)
print c.most_common(50)
我确定我的问题来 self 的 c = Counter(k),它打印每个城市名称的各个字母而不是城市本身。所以它将打印 (('a', 2), ('d', 1), ('k', 1), ('l', 1), ('O', 1), ('n', 1)而不是告诉我“Oakland”在我的csv文件中出现了多少次。如何让它向我显示整个字符串? (注意:我知道缩进,我只是不擅长将代码输入堆栈溢出)
最佳答案
如果pandas
是一个可行的选择,那么这很简单:
import pandas as pd
# read file
df = pd.read_csv(fin_name)
# return value counts as {city -> count} dictionary
d = df['City'].value_counts().to_dict()
# sort descending, return top 50 most common as list of tuples
d_sorted = sorted(d.items(), key=lambda x: x[1], reverse=True)[:50]
关于python - 无法从 csv 文件中获取前 N 个重复出现的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215718/