我正在使用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
需要某个地方?
答案 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?