我有一个csv文件,其中包含2年内每分钟的数据,并且想运行代码来计算24小时平均值。理想情况下,我希望代码在每24小时内对数据进行迭代,计算平均值和标准偏差以及dataA和dataB之间的R ^ 2,然后将此新数据输出到新的csv文件中(带有datestamp和每24小时)。
数据有一个不寻常的时间戳,我认为这可能会使我有些不适。我一直在尝试使用不同的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)
答案 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))