将csv中特定列的每一行的值相加

时间:2018-08-27 14:50:50

标签: python python-3.x csv

我找不到如何将第3列中的所有值相加,以在带有第一列和第二列的新csv文件中获得结果的方法。

行的可变值可以是1到7,如果存在0.5,1或2以外的值或字符,则将忽略加法

csv文件的示例:

323|2013-06-03 00:00:00|0|0|0
323|2013-06-03 01:00:00|1|
323|2013-06-03 02:00:00|1|0|0.5|86
323|2013-06-03 03:00:00|1|0|0.5|0
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0|0|0.5|0
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|1|0|0.5|2
323|2013-06-03 08:00:00|0|0.5

我正在寻找什么:

323|2013-06-03 00:00:00|0
323|2013-06-03 01:00:00|1
323|2013-06-03 02:00:00|1.5
323|2013-06-03 03:00:00|1.5
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0.5
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|3.5
323|2013-06-03 08:00:00|0.5

1 个答案:

答案 0 :(得分:2)

您可以使用csv模块。请注意,这给出了一个列表列表,每个子列表中的最终值均为float。您将需要一些其他逻辑才能从列表列表中写入csv文件。我将其保留为练习。

import csv
from io import StringIO

mystr = StringIO("""323|2013-06-03 00:00:00|0|0|0
323|2013-06-03 01:00:00|1|
323|2013-06-03 02:00:00|1|0|0.5|86
323|2013-06-03 03:00:00|1|0|0.5|0
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0|0|0.5|0
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|1|0|0.5|2
323|2013-06-03 08:00:00|0|0.5""")

L = []
with mystr as fin:
    reader = csv.reader(fin, delimiter='|')
    for i, j, *k in reader:
        L.append([i, j, sum(i for i in map(float, filter(None, k)) if i in {0.5, 1, 2})])

结果

print(L)

[['323', '2013-06-03 00:00:00', 0.0],
 ['323', '2013-06-03 01:00:00', 1.0],
 ['323', '2013-06-03 02:00:00', 1.5],
 ['323', '2013-06-03 03:00:00', 1.5],
 ['323', '2013-06-03 04:00:00', 0.0],
 ['323', '2013-06-03 05:00:00', 0.5],
 ['323', '2013-06-03 06:00:00', 0.0],
 ['323', '2013-06-03 07:00:00', 3.5],
 ['323', '2013-06-03 08:00:00', 0.5]]