从字典中获取平均值的最快方法

时间:2016-04-13 17:11:47

标签: python-3.x dictionary mean

print (data_Week)给了我:

{'2016-04-09 00:56': ['12.0', '50.7'], '2016-04-08 05:23': ['15.4', '49.8'], '2016-04-....}

值为TemperatureHumidity值。

我想从字典average获取data_Week值。

我正在使用的方法有效,但它需要我的覆盆子pi ....

for date,value in data_Week.items():
    temp_first_value_Week = float(value[0])
    temp_total_Week += temp_first_value_Week
    temp_length_Week += 1
    hum_first_value_Week = float(value[1])
    hum_total_Week += hum_first_value_Week
    hum_length_Week += 1
if temp_length_Week > 1:
    tempAverage_Week = temp_total_Week/temp_length_Week
    tempAverage_Week = "%.2f" % tempAverage_Week
tempAverage_Week = str(tempAverage_Week)+'\xb0C'
if hum_length_Week > 1:
    humAverage_Week = hum_total_Week/hum_length_Week
    humAverage_Week = "%.2f" % humAverage_Week
humAverage_Week = str(humAverage_Week)+'%'

每分钟都有一个字典条目,我试图获得一周的平均值。 因此,每天有1440个温度值和1440个湿度值.....每周10080个值。 有没有一种聪明的方法来获得平均值。 上面的方法采用15 minutes

附近的pi

编辑: 我发现,脚本花了这么长时间,因为我在他的BHawk post中提到的One Liner不需要字典。

我将使用John Coleman中的approach。它完美无缺。 感谢熊猫{{3}}。也许如果当前版本再次放慢速度我将切换到它。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

也许我错过了一些东西,但如果你想要的只是温度的平均值,那么1线解决方案应该是可行的并且应该快速运行:

>>> d = {'2016-04-09 00:56': ['12.0', '50.7'], '2016-04-08 05:23': ['15.4', '49.8']}
>>> sum(float(x) for x,y in d.values())/len(d)
13.7

答案 1 :(得分:2)

你尝试过熊猫吗?我认为它可以更好地处理您正在进行的数据/操作类型。例如,我将样本数据保存在json文件中并运行以下脚本:

import pandas as pd

with open("data.json", "r") as handle:
  x = pd.read_json(handle, orient='index')

print("Data:")
print(x)
print("Description:")
print(x.describe()) # Will print a summary of each column

结果

Data:
                        0     1
2016-04-08 05:23:00  15.4  49.8
2016-04-09 00:56:00  12.0  50.7
Description:
               0          1
count   2.000000   2.000000
mean   13.700000  50.250000
std     2.404163   0.636396
min    12.000000  49.800000
25%    12.850000  50.025000
50%    13.700000  50.250000
75%    14.550000  50.475000
max    15.400000  50.700000

答案 2 :(得分:1)

每次读取值时,您都不需要增加条目数。在读取值时,您不需要转换为浮动,它们已经是浮点数。

尝试:

week_length = len(data_Week.keys())
if week_length > 1:
    tempAverage_Week = sum([x for x,y in data_Week.values()])/weekLength
    humAverage_Week = sum([y for x,y in data_Week.values()])/weekLength