【问题标题】:Sum a csv column in python在python中求和一个csv列
【发布时间】:2012-11-11 02:38:36
【问题描述】:

我正在尝试对 csv 文件中的一列求和。该文件如下所示:

Date  Value
2012-11-20  12
2012-11-21  10
2012-11-22  3

这可以在数百行的范围内。我需要将总价值(在本例中为 25)打印到终端上。到目前为止,我有一些代码,但它导致的数字比它应该总和要小得多。在对其进行故障排除时,我打印了总和,并意识到它实际上不是将 12 + 10 + 3 相加,而是将每列中的数字和总和为 1 + 2 + 1 + 0 + 3,这显然等于很多较小的总数。这是我的代码,如果有人可以提出建议会很棒!

with open("file.csv")) as fin:
  headerline = fin.next()
  total = 0
  for row in csv.reader(fin):
    print col # for troubleshooting
    for col in row[1]:
      total += int(col)
  print total

【问题讨论】:

    标签: python csv sum


    【解决方案1】:

    csv 模块会逐行遍历您的行,无需再遍历列。求和int(row[1]):

    with open("file.csv") as fin:
        headerline = fin.next()
        total = 0
        for row in csv.reader(fin):
            total += int(row[1])
        print total
    

    您可以使用带有生成器表达式和 sum() 内置函数的快捷方式:

    with open("file.csv") as fin:
        fin.next()
        total = sum(int(r[1]) for r in csv.reader(fin))
    

    请注意,在 Python 中,字符串也是序列,因此当您执行 for col in row[1]: 时,您将循环遍历 row[1] 的各个字符;所以你的第一行是12

    >>> for c in '123':
    ...     print repr(c)
    ...
    '1'
    '2'
    '3'
    

    【讨论】:

      【解决方案2】:

      您可以改用 pandas。

      import pandas as pd
      df2=pd.read_csv('file.csv')
      df2['Value'].sum()
      

      【讨论】:

        猜你喜欢
        • 2011-05-20
        • 2013-07-06
        • 2019-06-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-22
        相关资源
        最近更新 更多