计算日期和时间的Python平均值手动给出的时间?

时间:2016-11-02 04:58:55

标签: python pandas average

我的数据集:

时间戳温度
9/1/2016 0:00:08 53.8
9/1/2016 0:00:38 53.8
9/1/2016 0:01:08 53.8
9/1/2016 0:01:38 53.8
9/1/2016 0:02:08 53.8
9/1/2016 0:02:38 54.1
9/1/2016 0:03:08 54.1
9/1/2016 0:03:38 54.1
9/1/2016 0:04:38 54
9/1/2016 0:05:38 54
9/1/2016 0:06:08 54
9/1/2016 0:06:38 54
9/1/2016 0:07:08 54
9/1/2016 0:07:38 54
9/1/2016 0:08:08 54.1
9/1/2016 0:08:38 54.1
9/1/2016 0:09:38 54.1
9/1/2016 0:10:32 54
9/1/2016 0:11:02 54
9/1/2016 0:11:32 54
9/1/2016 0:00:08 54
9/2/2016 0:00:20 32
9/2/2016 0:00:50 32
2016年9月2日0:01:20 32
2016年9月2日0:01:50 32
2016年9月2日0:02:20 32
2016年9月2日0:02:50 32
2016年9月2日0:03:20 32
9/2/2016 0:03:50 32
2016年9月2日0:04:20 32
2016年9月2日0:04:50 32
2016年9月2日0:05:20 32
9/2/2016 0:05:50 32
2016年9月2日0:06:20 32
2016年9月2日0:06:50 32

from datetime import datetime  
import pandas as pd

def same_day(date_string):        
return datetime.strptime(date_string, "%m/%d/%Y %H:%M:%S").strftime('%m-%d')

df = pd.read_csv('dataset.csv', index_col=[0],parse_dates=[0], usecols=[0,1,2])
********calculate per day
print (df.index.strftime('%d%m%H'))
print (df.groupby([df.index.strftime('%d%m%H')]).mean())

这里,如何导出json数组Formate?

#****** exporting in CSV format
df.reset_index().to_csv('dataset.csv')

现在我想手动给DATE并且每天检查5小时和10分钟的平均值。就像那样......我们可以手动给出日期和时间吗?请帮帮忙?

表示例如: - 日期01-09-2016 10分钟平均线是36.08 日期02-09-2016 10分钟平均值为39.05

日期01-09-2016 5小时平均值是45.2 日期01-09-2016 5小时平均值是44.3

就像每个日期那样,不管我给出的日期和我给的任何时间......

使用以下代码,我可以找到不到2分钟的温度: -

    import pandas as pd
    df = pd.read_csv('dataset.csv', parse_dates=['Timestamp'])
    #print (df)

    mask =  df.Timestamp.dt.minute < 2
    df1 = df[mask]

    df2 = df1.Timestamp.dt.date == pd.to_datetime('9/1/2016').date()
    print (df2)

用于计算Mean(): -

    df3 = df2.set_index('Timestamp', drop=False).resample('D').mean()
    print (df3)

错误即将来临: -

AttributeError: 'Series' object has no attribute 'set_index'

1 个答案:

答案 0 :(得分:0)

我根据您的示例数据创建了一个DataFrame(我将文件制表符分隔开来):

df = pd.read_csv('foo.csv',sep = '\t', header = 0,
                 parse_dates = [0], infer_datetime_format = True)
>>> df.head()
            Timestamp  Temperature
0 2016-09-01 00:00:08         53.8
1 2016-09-01 00:00:38         53.8
2 2016-09-01 00:01:08         53.8
3 2016-09-01 00:01:38         53.8
4 2016-09-01 00:02:08         53.8
>>>

然后我开始阅读Time Series/Date Functionality section of the docs,如果DataFrame索引是DateTime系列似乎更容易 - 我也注意到数据中有一些非连续的日期时间,所以我在设置索引后排序(有关于无序日期时间的文档中的警告:

df1 = df.set_index('Timestamp')
df1 = df1.sort_index()

>>> df1.head()
                     Temperature
Timestamp                       
2016-09-01 00:00:08         53.8
2016-09-01 00:00:08         54.0
2016-09-01 00:00:38         53.8
2016-09-01 00:01:08         53.8
2016-09-01 00:01:38         53.8
>>>

我没有太深入文档(在我阅读时练习示例),直到我偶然发现了一种过滤日期时间范围的方法:

>>> df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15']
                     Temperature
Timestamp                       
2016-09-01 00:01:38         53.8
2016-09-01 00:02:08         53.8
2016-09-01 00:02:38         54.1
2016-09-01 00:03:08         54.1
>>> 

这让它变得非常简单。您可以将结果分配给名称然后获得均值或立即得到均值:

>>> z = df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15']
>>> z.mean()
Temperature    53.95
dtype: float64
>>> df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15'].mean()
Temperature    53.95
dtype: float64
>>>

我停止阅读那里的文档,因为在手动输入日期/时间

的开始,结束或周围的任何时间段构建日期时间字符串应该非常容易

公平地说,几个星期前,我厌倦了只是试图让熊猫做我想做的事情,所以我在pandas Talks page上观看了'Pardas From the Ground Up'的Pycon演讲。我甚至不看全部事情,但我所吸收的东西极大地提高了我的生产力。