Python获取平均每小时数据

时间:2015-11-30 17:56:14

标签: python csv pandas

我有一个包含时间戳和数据的csv文件。时间戳以10秒的间隔组织。我试图按小时查找每列和组的平均值。我是Python的新手。到目前为止,我已经使用了以下代码,它执行时没有错误,但它会生成一个空白文件。任何帮助表示赞赏。感谢。

import csv  
import sys  
import itertools  


with open('convertcsv.csv', "r") as input, open ('test1.csv',"w") as output:    
    reader = csv.reader(input)
    average = 0
    Sum = 0  
    row_count = 0  
    for row in input:  
        for column in row.split(','):  
            n = float(column[1])  
            Sum += n  
            row_count += 1  
    average = Sum / len(column[1])  
    print (average)  
    writer = csv.writer(output)  
    writer.writerow(average)  

2 个答案:

答案 0 :(得分:1)

我建议您使用pandas

read_csv(),一旦您将数据放在DataFrame中,就可以使用groupbyTimeGrouper(将TimeStamp列设为{ {1}}喜欢这样:

index

结果应该是import pandas as pd df = pd.read_csv(path) df.set_index(time_stamp_column, inplace=True) hourly_avg = df.groupby(pd.TimeGrouper('H')).mean() hourly_avg.to_csv(path/to/save/file.csv) 文件,其中每个变量的平均值为一列,文件中每小时一行。

答案 1 :(得分:0)

我知道当你只是学习Python但是相信我时,大熊猫是非常令人生畏的,而不是使用csv模块。您可以通过几行代码与csv模块和for循环以及手动定义变量来做很多事情。

下面的灰色显示了您如何读取数据,检查数据类型,重新采样数据以及写入csv文件。

您可能遇到的最大问题是正确设置数据类型(dtypes)。例如,如果您读入数据并检查数据类型,您可能会看到:

df.dtypes
Index     object
A        float64
B        float64
C        float64
D        float64
dtype: object

首先需要datetime数据类型中的Index。为此,请执行以下操作:

df['Index'] = pd.to_datetime(df['Index'])

然后再次检查您的数据类型以确认您已将Index转换为日期时间数据类型:

Index    datetime64[ns]
A               float64
B               float64
C               float64
D               float64
dtype: object

为了在pandas中resample,您的索引必须是DatetimeIndex。要在数据框中设置索引,请使用:

df = df.set_index('Index')

如果您的数据类型现在正确,则可以执行resample

import pandas as pd
import numpy as np

#UNCOMMENT THE CODE PARTS BELOW IF DESIRED
## cp1252 encoding works best on my windows machine
#df = pd.read_csv('convertcsv.csv', encoding='cp1252')
## check datatypes to make sure they are not 'object' when it should be 'float64' or 'int64' for example
#print(df.dtypes)
## you want to group by hour and find the average (aka: mean) which is where resample comes in
## the 'H' means 'hours' and how='mean' is telling it what to do with the data after it groups by hour
#df = df.resample('H', how='mean')
## you want to write test1.csv . If you don't want the index, set index=False
#df.to_csv('test1.csv', index=False)

#Example
index = pd.date_range('1/1/2015', periods=6*60*3, freq='10S')
data = abs(np.random.randn(6*60*3, 4))
df = pd.DataFrame(data=data, index=index, columns=list('ABCD'))
df = df.resample('H', how='mean')
print(df)