python - 使用 Python 对 csv 数据进行分组

标签 python csv

我有一个包含数千个条目的 csv 文件,这些条目需要分成几组。在下面的示例中,我需要根据河流名称将每一行分成组,以便稍后我可以根据它们的组重新格式化信息。

River Name, Branch, Length
Catnip, 1, 2145.30
Peterson, 2, 24.5
Catnip, 3, 15.4
Fergerson, 1, 5.2
Catnip, 1, 88.56
Peterson, 2, 6.45

我能想到的对信息进行分组的唯一方法是:
  • 使用 python 读取 csv 并创建一个仅包含唯一河流名称的列表。
  • 根据独特的河流名称创建新的个人 csv,例如 Peterson.csv,
    猫薄荷.csv。
  • 使用 python 读取原始 csv,并根据正在读取的行上的河流名称,将该行写入相应的 .csv 文件。例如,行 Catnip, 1, 2145.30 将被写入 catnip.csv

  • 我不认为这是解决此问题的一种有效方法,因为它为我提供了大约 1500 个需要打开和写入的 csv,但我对 python 知识的了解有限。如果有人可以提供更好的方法,将不胜感激。

    最佳答案

    您也可以简单地使用 csv模块并将结果保存到字典中。我列举了读者跳过第一行(我相信一定有更简单的方法......)。然后我读取每一行并将值分配给 river , branchlength .如果河流不在字典中,则使用空列表对其进行初始化。然后它附加 branch 的元组对和 length到字典。

    rivers = {}
    with open('rivers.csv', mode='rU') as f:
        reader = csv.reader(f, delimiter=',')  # dialect=csv.excel_tab?
        for n, row in enumerate(reader):
            if not n:
                # Skip header row (n = 0).
                continue  
            river, branch, length = row
            if river not in rivers:
                rivers[river] = list()
            rivers[river].append((branch, length))
    
    >>> rivers
    {'Catnip': [('1', '2145.3'), ('3', '15.4'), ('1', '88.56')],
     'Fergerson': [('1', '5.2')],
     'Peterson': [('2', '24.5'), ('2', '6.45')]}
    

    关于python - 使用 Python 对 csv 数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985011/

    相关文章:

    python - 在 IPython 控制台 (Spyder) 中,我可以在运行程序后从 main() 访问变量吗?

    Python-Subprocess-Popen 在多线程环境下的不一致行为

    javascript - 如何在我的网站上使用 CSV 文件中的数据?

    sql - 如何从 Oracle CSV 导出中删除注释行?

    xml - 根据 .csv 文件更新 .xml 文档

    python - 在 python 中打印格式化列表和索引值的优雅方法?

    python - 为什么我不能在 python 中更改另一个模块变量?

    python - 一次将数组中的每个项目分开

    python - 将一系列字符串(加上数字)写入一行 csv

    postgresql - 如何正确使用 postgres 的 COPY FROM?