9

我正在尝试对 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
4

2 回答 2

11

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'
于 2012-11-22T16:51:49.950 回答
0

您可以改用熊猫。

import pandas as pd
df2=pd.read_csv('file.csv')
df2['Value'].sum()
于 2021-08-21T07:24:02.760 回答