python - 无法从 csv 文件中获取前 N 个重复出现的值

标签 python pandas csv dataframe

你好,我的一些 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/

相关文章:

python - 我的数据框有很多(192)列。如何同时选择两列?

使用 `readr::read_csv_chunked()`批量读取csv文件

python - 保存 PDF 时的 matplotlib 线宽

python - 如何创建一个 python 函数来计算面板数据的利差?

java - 如何在 Java 中创建斐波那契数列

python - Pandas:按月份划分的词频

javascript - 带 Y 值跟踪的 D3.js 多系列图表

python - 使用 csv.reader 和 csv.writer 写入同一文件而不是不同的文件?

python - 将格式化控制字符(退格和回车)应用于字符串,无需递归

python - 使用神经网络学习分类值的分布