从CSV文件Python中的重复名称中获取读数

问题描述 投票:0回答:2

我是Python的新手,在读取csv文件时遇到一些问题。每列中都有传感器名称,日期戳和读数。但是,有多个相同的传感器名称,我已经列出了称为OPTIONS的不同选项的列表,如下所示

OPTIONS = []

with open('sensor_data.csv', 'rb') as f:

    reader = csv.reader(f, delimiter = ',')

    for row in reader:
        if row[0] not in OPTIONS:
            OPTIONS.append(row[0])
        sensor_name = row[0]
        datastamp = row[1]
        readings = float(row[2]) 
        print(OPTIONS)

选项prints fine

但是现在我在检索任何读数,并使用它们来计算每个唯一传感器名称的平均和最大读数时遇到问题。

这里是a few lines of sensor_data.csv,对于Sensor_1到sensor_25,从2018-01-01到2018-12-31。

任何帮助将不胜感激。

python
2个回答
1
投票

readings变量仅具有每一行的读数。获得平均读数的一种方法是跟踪读数的总和和计数(分别为sum_readingscount_readings),然后在for循环之后,可以通过将总和除以计数来获得平均值。您可以通过使用读数最小值(我假设为0)初始化max_readings变量并在当前读数大于max_readingsmax_readings < readings)]时更新变量来获得最大值。

import csv

OPTIONS = []
OPTIONS_READINGS = {}

with open('sensor_data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter = ',')
    for row in reader:
        if row[0] not in OPTIONS:
            OPTIONS.append(row[0])
            OPTIONS_READINGS[row[0]] = []
        sensor_name = row[0]
        datastamp = row[1]
        readings = float(row[2]) 
        print(OPTIONS)
        OPTIONS_READINGS[row[0]].append(readings)

for option in OPTIONS_READINGS:
    print(option)
    readings = OPTIONS_READINGS[option]
    print('Max readings:', max(readings))
    print('Average readings:', sum(readings) / len(readings))

编辑:对不起,我误解了这个问题。如果要获得每个唯一选项的最大值和平均值,则有一种更直接的方法是使用其他词典类型的变量OPTIONS_READINGS,其键为选项名称,值为读数列表。您可以通过分别简单地使用表达式max(OPTIONS_READINGS[option])sum(OPTIONS_READINGS[option]) / len(OPTIONS_READINGS[option])来找到一个选项的最大和平均读数。


0
投票

下面是较短的版本

© www.soinside.com 2019 - 2024. All rights reserved.