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行を1つずつループします。その後、列をループする必要はありません。合計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]したがって、最初の行は次のようになり1ます2

>>> 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 に答える