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

2024-03-29 08:11:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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,从2018-01-01到2018-12-31,传感器1到传感器25。你知道吗

任何帮助都将不胜感激。你知道吗


Tags: 文件csvin名称data选项with传感器
2条回答

下面是一个简短的版本

import csv
from collections import defaultdict

readings = defaultdict(list)

with open('sensor_data.csv', 'r') as f:
    reader = csv.reader(f, delimiter = ',')
    for row in reader:
        readings[row[0]].append(float(row[2]) )

for sensor_name,values in readings.items():
    print('Sensor: {}, Max readings: {}, Avg: {}'.format(sensor_name,max(values), sum(values)/ len(values)))

对于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]),就可以找到选项的最大和平均读数。你知道吗

相关问题 更多 >