遍历日期,计算每24小时的平均值

时间:2019-02-11 12:01:32

标签: python csv date average

我有一个csv文件,其中包含2年内每分钟的数据,并且想运行代码来计算24小时平均值。理想情况下,我希望代码在每24小时内对数据进行迭代,计算平均值和标准偏差以及dataA和dataB之间的R ^ 2,然后将此新数据输出到新的csv文件中(带有datestamp和每24小时)。

Example the csv data

数据有一个不寻常的时间戳,我认为这可能会使我有些不适。我一直在尝试使用不同的For循环来遍历数据,但是我不确定如何指定每个24小时的平均值。

这是我到目前为止的代码,但是我不确定如何完成For Loop来实现所需的代码。如果有人可以帮助,那就太好了!

import math
import pandas as pd
import os
import numpy as np
from datetime import timedelta, date

# read the file in csv
data = pd.read_csv("Jacaranda_data_HST.csv")

# Extract the data columns from the csv
data_date = data.iloc[:,1]
dataA  = data.iloc[:,2]
dataB  = data.iloc[:,3]

# set the start and end dates of the data
start_date = data_date.iloc[0]
end_date = data_date.iloc[-1:]

# for loop to run over every 24 hours of data
day_count = (end_date - start_date).days + 1
for single_date in [d for d in (start_date + timedelta(n) for n in 
range(day_count)) if d <= end_date]:
  print np.mean(dataA), np.mean(dataB), np.std(dataA), np.std(dataB)

# output new csv file - **unsure how to call the data** 
csvfile = "Jacaranda_new.csv"
outdf = pd.DataFrame()
#outdf['dataA_mean'] = ??
#outdf['dataB_mean'] = ??
#outdf['dataA_stdev'] = ??
#outdf['dataB_stdev'] = ??
outdf.to_csv(csvfile, index=False)

1 个答案:

答案 0 :(得分:1)

一个简化的方法可以是按日历天在dict中分组。我没有在DataFrames中进行pandas时间管理的经验,所以这可能是一种替代方法。

您可以创建一个dict,其中的键是数据的日期(没有时间部分),因此您以后可以计算每个键下所有数据点的平均值。

data_date = data.iloc[:,1]
data_a  = data.iloc[:,2]
data_b  = data.iloc[:,3]

import collections
dd_a = collections.defaultdict(list)
dd_b = collections.defaultdict(list)

for date_str, data_point_a, data_point_b in zip(data_date, data_a, data_b):
    # we split the string by the first space, so we get only the date part
    date_part, _ = date_str.split(' ', maxsplit=1)

    dd_a[date_part].append(data_point_a)
    dd_b[date_part].append(data_point_b)

现在您可以计算平均值:

for date, v_list in dd_a.items():
    if len(v_list) > 0:
        print(date, 'mean:', sum(v_list) / len(v_list))
for date, v_list in dd_b.items():
    if len(v_list) > 0:
        print(date, 'mean:', sum(v_list) / len(v_list))