在Python中添加特定列中的所有值

时间:2017-01-23 11:08:58

标签: python

我正在使用Raspberry Pi来收集天气数据,它确实很好。 将收集到的所有数据保存到逗号分隔的txt文件中。

现在我希望从这些收集的数据中获得平均温度,因此我需要将某列的所有条目一起添加。

以下是收集数据的一部分,第二列或索引[1]是捕获的临时数据:

def list(self, request, *args, **kwargs):
        response = super(YourClass, self).list(request, args, kwargs)
        # Add data to response.data Example for your object:
        response.data['custom_fields'] = 10 # Or wherever you get this values from
        return response

以下是我尝试使用的示例代码来获取平均温度,但它一直在抛出错误:

00:00,1.5,1025,100,1.5,Yes
01:00,2.0,1025,100,2.0,Yes
02:00,2.5,1025,100,2.5,Yes
03:00,2.7,1025,100,2.7,Yes
04:00,2.8,1025,100,2.8,Yes
05:00,3.0,1025,100,3.0,Yes
06:00,3.7,1025,100,3.7,Yes
07:00,4.1,1024,100,4.1,Yes
08:00,4.2,1025,100,4.2,Yes
09:00,4.6,1026,100,4.6,Yes
10:00,5.9,1026,100,5.9,Yes
11:00,6.3,1026,100,6.3,Yes
12:00,6.8,1026,100,6.8,Yes
13:00,7.9,1026,100,7.9,Yes
14:00,8.1,1026,100,8.1,Yes
15:00,7.8,1026,100,7.8,Yes
16:00,6.8,1026,100,6.8,Yes
17:00,5.8,1027,100,5.8,Yes
18:00,5.0,1027,100,5.0,Yes
19:00,4.7,1028,100,4.7,Yes
20:00,4.0,1028,100,4.0,Yes
21:00,3.7,1028,100,3.7,Yes
22:00,3.5,1028,100,3.5,Yes
23:00,4.0,1029,100,4.0,Yes
23:59,2.8,1029,100,2.8,Yes

这是错误:

#Adding all values in a columns
AvTemp = 0
with open(YdPath + yFileDate + '.txt', 'r') as AvgTemp:
    for line in AvgTemp:
        line = line.strip().split(',')
        AvTemp += sum(int(line[1]))
        print AvTemp

所以我可以看到条目是十进制会导致错误,因为它不是一个整数,但即使我删除了AvTemp += sum(int(line[1])/25) ValueError: invalid literal for int() with base 10: '1.5' 部分,我仍然会收到另一个错误。

任何帮助将不胜感激

由于

尝试各种提示后更新

在尝试了各种提示和答案后,我仍然没有得到所需的结果。 基本上我只需要打印实际的最终结果,即int的总和等于114.2然后将其除以行的数量index[1],在这种情况下为25,得到4.568的结果。 / p>

使用这些不同的帮助提示,这是当前打印到屏幕上的内容:

len

你可以看到它在最后的总数114.2之前加上最后一行打印出每一行。 (我在这里省略了分区部分)。 我真的不希望所有其他线条打印出来。 我认为这可能是1.5 3.5 6.0 8.7 11.5 14.5 18.2 22.3 26.5 31.1 37.0 43.3 50.1 58.0 66.1 73.9 80.7 86.5 91.5 96.2 100.2 103.9 107.4 111.4 114.2 需要某个地方?

2 个答案:

答案 0 :(得分:1)

将其投放到float,例如:

for line in AvgTemp:
    line = line.strip().split(',')
    AvTemp += sum(float(line[1]))
print AvTemp

您可以将值附加到列表中,然后总结如下:

tot = []
for line in AvgTemp:
    line = line.strip().split(',')
    value = float(line[1])
    tot.append(value)
#sum values
total = sum(tot)

答案 1 :(得分:1)

行[1]是单个值,sum(int(line [1]))没有意义。 替换

ORDER BY

SELECT DISTINCT
    Strategy
    ,CASE WHEN Strategy = 'All' THEN 0 ELSE Strategy END AS SortOrder 
FROM 
    @Strategy
ORDER BY 
    SortOrder

这应该给你总和,然后你可以平均。

完整的代码是:

AvTemp += sum(int(line[1]))

您也可以尝试查看此问题:Read specific columns from a csv file with csv module?