【问题标题】:How to calculate the hourly average of my data?如何计算我的数据的每小时平均值?
【发布时间】:2021-02-05 01:46:25
【问题描述】:

我将来自多个传感器的数据存储在一个 CSV 文件中。

时间分辨率为一分钟。

很容易计算出每个传感器的每日平均值。

我需要计算数据的每小时平均值。

CSV 数据集格式:

5/27/2016 0:00:00 Temperature 39 25
5/27/2016 0:00:00 Pressure    12 39
5/27/2016 0:00:00 Humidity    19 79
.
.
.
5/27/2016 0:01:00 Temperature 39 25
  • 首先是日期,
  • 秒是时间,
  • 第三个是参数名,
  • 第四个是参数代码,
  • 最后一个是值。

我的代码的相关部分:

import pandas as pd
import numpy as np

df = pd.read_csv('2016-05-27.csv')

Count_Row=df.shape[0] #gives number of row count

print("The number of rows is", Count_Row)

Parameter_code = 11201
timestamp= []
Par_value = []

n = 0
for rown in range(0,Count_Row):
   if df.iloc[rown,3] == Parameter_code:
       temp = df.iloc[rown, 4]
       if temp != 'nan':
           Par_value.append(float (temp))
           timestamp.append(df.iloc[rown, 1])
           n += 1

print("total sapmles", n) 

print (timestamp)
daily_avg = np.average(Par_value)        
print("The daily average ", daily_avg)

问题:这个每小时平均有什么方法吗?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: python csv


【解决方案1】:

我认为您需要避免在 pandas 中出现循环,因为速度慢且使用:


import pandas as pd

temp=u"""
5/27/2016,0:00:00,Temperature,39,25
5/27/2016,0:00:00,Pressure,12,39
5/27/2016,0:00:00,Temperature,39,NaN
5/27/2016,0:01:00,Temperature,39,25"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
names = ['date','time','name','parameter code','value']
df = pd.read_csv(pd.compat.StringIO(temp), parse_dates=[['date','time']], names=names)
print (df)
            date_time         name  parameter code  value
0 2016-05-27 00:00:00  Temperature              39   25.0
1 2016-05-27 00:00:00     Pressure              12   39.0
2 2016-05-27 00:00:00  Temperature              39    NaN
3 2016-05-27 00:01:00  Temperature              39   25.0

df = df[df['parameter code'] == 39]
print (df)
            date_time         name  parameter code  value
0 2016-05-27 00:00:00  Temperature              39   25.0
2 2016-05-27 00:00:00  Temperature              39    NaN
3 2016-05-27 00:01:00  Temperature              39   25.0

df1 = df.resample('H', on='date_time')['value'].mean().reset_index(name='mean_val')
print (df1)
   date_time  mean_val
0 2016-05-27      25.0

【讨论】:

  • 我没有得到第一部分,即。将列名称的参数名称和日期时间的 parse_date 添加到 read_csv。我应该手动添加吗?我有数千个这样的文件。我也无法理解代码 temp =u """ ... """ 的第一部分。我是python的初学者。
  • 你能解释更多吗?有不同的结构吗?还是相同的文件结构?
  • 结构相同,但数据记录器每天制作文件。所以每天都有不同的文件。所以我有3年的数据。
  • 所以使用df = pd.concat([pd.read_csv(fp, parse_dates=[['date','time']], names=names) for fp in files], ignore_index=True)
  • 我用我的数据尝试了这段代码,但它显示错误。经过调试,我发现我的数据在每一行的末尾都有逗号(,)。因此,为了解决这个问题,我将一行修改为 names = ['date','time','name','parameter code','value', 'Invalid_column'] 。它创建了一个额外的列 - 具有所有值 NaN 的 Invalid_column。不过,我的目的实现了。
猜你喜欢
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2021-05-09
  • 1970-01-01
  • 2023-03-06
  • 2020-04-15
相关资源
最近更新 更多