繁体   English   中英

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

[英]sum the values of each row from a specific column in 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

您可以使用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]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM