你好,所以我遇到了一些python的问题。我正在尝试制作一个程序来接收一个csv文件并告诉我列中最高的50个单词。 我的csv文件遵循以下格式: 身份证,城市,州,酒店名称,价格 1,Atlanta,GA,Le Royale,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)
我确定我的问题来自我的c = Counter(k),它会打印每个城市名称的单个字母而不是城市本身。所以它会打印((' a',2),(' d',1),(' k',1),' l& #39;,1),(' O',1),(' n',1)而不是告诉我有多少次奥克兰'出现在我的csv文件。如何让它向我展示整个字符串? (注意:我知道缩进,我将代码输入堆栈溢出时非常糟糕)
答案 0 :(得分:1)
如果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]