【问题标题】:Breaking CSV File into multiple files based on a column including Total Sum of the columns根据包含列总和的列将 CSV 文件分成多个文件
【发布时间】:2015-11-05 15:24:45
【问题描述】:

我在 stackoverflow https://stackoverflow.com/questions/31081953/split-csv-file-into-two-csv-files-based-on-the-content-of-a-column 上找到了一个解决方案,用于将文件分成多个列,如下所示

import csv
from itertools import groupby

for key, rows in groupby(csv.reader(open("newone.csv")),
                         lambda row: row[0]):
    with open("%s.csv" % key, "w") as output:
        for row in rows:
            output.write(",".join(row) + "\n")

这可以很好地完成工作,但我想打印出某些列中的数字总和,例如第 3 列和第 4 列,我该怎么做?
看看这张图片 - http://i.imgur.com/KIxLOnr.jpg 此代码工作正常,但我需要在该图像中生成以橙色突出显示的最后一行(我手动添加了那些)。我该怎么做?

【问题讨论】:

    标签: python file csv itertools


    【解决方案1】:

    这将在每行的末尾添加数字:

    for row in rows:
        output.write(",".join(row))
        sum_of_certain_cols = row[2] + row[3]
        output.write("," + sum_of_certain_cols + "\n")
    

    如果你想把总和放在某个位置,你应该做一个insert,比如:

        sum_of_certain_cols = row[2] + row[3]
        row.insert(4, str(sum_of_certain_cols))
        output.write(",".join(row) + "\n")
    

    在 cmets 之后编辑

    1. 不要忘记将列转换为数据类型,尽管我认为不再需要此行,因为我了解您的需求:

      sum_of_certain_cols = int(row[2]) + int(row[3])
      
    2. 如果你想在最后加总,你需要一个累加器,例如:

      sums = [0] * len(rows)
      

      然后在循环内做所有的和:

      sums[1] += int(row[1])
      sums[2] += int(row[2])
      

      然后在循环之后把它们都写出来:

      output.write(",".join(sum) + "\n")
      

    【讨论】:

    • 感谢@xbello,但它没有用,它只是在右侧的行中添加了一个数字,它看起来像是连接而不是添加。我在上面分享的代码运行良好(请查看此图片:i.imgur.com/KIxLOnr.jpg),但它没有给出图片中以橙色突出显示的最后一行 - 即 A 列和 C 列的总和(我在那里手动添加了该部分) .我怎样才能得到这两行的总和?谢谢。
    • 感谢您的快速响应。我真的是一个新手,所以只想确定:这是正确的完整代码吗? pastebin.com/M4mXsZEb 再次感谢。
    • 您应该删除第 7 行,并且您必须添加与 CSV 中的列一样多的 dict 键(如果您有 3 列,sums = {"row_1": 0, "row_2": 0, "row_3": 0} 等等)。记住最后一行的iteritems()
    • @B A,此时您应该已经注意到最后一行是无序的。我已经相应地更新了答案。
    • 我试过但不能让它工作?如果您不介意,您能否使用完整代码以及您的编辑更新答案? :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多