无法从csv文件中获取前N个reoccuring值

时间:2018-03-11 01:23:45

标签: python pandas csv dataframe

你好,所以我遇到了一些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文件。如何让它向我展示整个字符串? (注意:我知道缩进,我将代码输入堆栈溢出时非常糟糕)

1 个答案:

答案 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]