【问题标题】:How to find occurrences of certain string everytime X value comes on in a csv in python?python - 每次X值出现在python的csv中时,如何查找某个字符串的出现?
【发布时间】:2018-04-17 09:37:08
【问题描述】:

我创建了一个 .csv,其中包含自 1979 年以来每年在 NHL 中被选中的每位球员的数据。我的 csv 中的 9000 行如下所示:

1979,Rob Ramage (D),ON
1979,Perry Turnbull (LW),AB
1979,Raymond Bourque (D),QC
2017,Kristian Røykås Marthinsen (LW),NOR
2017,William Reilly (D),ON

我试图找到的是,每个省/州/国家每年有多少次进入。比如第一行是1979时第三行出现多少次“QC”,放在另一个csv中。请注意,我的 csv 中的所有行都按年份排序,这意味着我的第一行都以 1979 开头,然后是 1980,然后是 1981,等等。

将一些州、省和国家的结果组合在一起后,我希望能够得出如下结果:

1979,32,94,36,4
1980,37,84,40,10
1981,40,90,34,22
1982,39,102,18,10
...

第一行是年份,然后,每次出现该值的每个字符串(QC、ON、NOR 等)时。正如你所看到的,我对这个应用程序的玩家名字没有用处。

我的问题是,如何在具有特定值的行中找到特定字符串的出现?我觉得这应该不会太复杂,但我根本不知道从哪里开始,因为我对编程很陌生。

非常感谢!

【问题讨论】:

  • 您是否允许使用 3rd 方库,例如pandas ?

标签: python list csv find-occurrences


【解决方案1】:

纯 Python

这只能使用collections.Counter 来完成。

from collections import Counter

with open(file_name, 'r') as f:
    origin_count_by_year = {}

    for line in f:
        year, _, origin = map(str.strip, line.split(','))

        if year not in origin_count_by_year:
            origin_count_by_year[year] = Counter()

        origin_count_by_year[year][origin] += 1

使用您提供的数据,这将生成以下dict

{
    '1979': Counter({'ON': 1, 'AB': 1, 'QC': 1}),
    '2017': Counter({'NOR': 1, 'ON': 1})
}

替代方案

上面的方法适合短小的项目,但是如果你打算扩展它,解析 csv 文件是错误的方法。

最好的方法可能是使用panda,这是一个专门用于数据分析的库。它将帮助您通过parsing your csv filereturning a DataFrame 进行缩放。

第二种方法是使用数据库而不是 csv 文件。使用sqlite3标准库,您可以按年份和国家/地区查询玩家并统计他们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 2011-04-21
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    相关资源
    最近更新 更多