【问题标题】:Calculate Python Average for Date & Time given Manually?计算手动给出的日期和时间的 Python 平均值?
【发布时间】:2016-11-02 04:58:54
【问题描述】:

我的数据集:

时间戳温度
2016 年 9 月 1 日 0:00:08 53.8
2016 年 9 月 1 日 0:00:38 53.8
2016 年 9 月 1 日 0:01:08 53.8
2016 年 9 月 1 日 0:01:38 53.8
2016 年 9 月 1 日 0:02:08 53.8
2016 年 9 月 1 日 0:02:38 54.1
2016 年 9 月 1 日 0:03:08 54.1
2016 年 9 月 1 日 0:03:38 54.1
2016 年 9 月 1 日 0:04:38 54
2016 年 9 月 1 日 0:05:38 54
2016 年 9 月 1 日 0:06:08 54
2016 年 9 月 1 日 0:06:38 54
2016 年 9 月 1 日 0:07:08 54
2016 年 9 月 1 日 0:07:38 54
2016 年 9 月 1 日 0:08:08 54.1
2016 年 9 月 1 日 0:08:38 54.1
2016 年 9 月 1 日 0:09:38 54.1
2016 年 9 月 1 日 0:10:32 54
2016 年 9 月 1 日 0:11:02 54
2016 年 9 月 1 日 0:11:32 54
2016 年 9 月 1 日 0:00:08 54
2016 年 9 月 2 日 0:00:20 32
2016 年 9 月 2 日 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
2016 年 9 月 2 日 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
2016 年 9 月 2 日 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数组形式导出??

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

现在我想手动给出日期并检查每天 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)

用于计算平均值():-

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

错误来了:-

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

【问题讨论】:

  • 过滤手动输入日期/时间的DataFrame;对所需时间范围的值求和;将总数除以时间。
  • 做一些阅读,查看 DataFrame 文档以了解可用的内容,观看一些视频,练习您找到的示例,学习如何过滤 DataFrame,学习如何迭代 DataFrame。尚不完全清楚您需要什么,缺少许多细节。您在同一天显示了两个不同的 5 小时平均值,但这没有任何意义 - 一天中有两个以上的 5 小时时段。
  • 还在苦苦挣扎..帮帮我。

标签: python pandas average


【解决方案1】:

我根据您的示例数据创建了一个 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 做我想做的事,所以我观看了 pandas Talks page 上的“Pandas From The Ground Up”Pycon 演讲。我什至没有看整件事,但我所吸收的内容极大地提高了我的工作效率。

【讨论】:

  • 如果我有多个列,那么...比如温度 1 和温度 2 ??
  • 我试过但没有工作..如果它是两列,它给两者的组合平均......主要问题是当我重新采样我的 df 时,它给了我完整的平均..我正在使用:- df1.resample('D').mean(axis=1) 它为我的两列提供了组合平均值。
  • 还有一件事???如何查找丢失的时间戳..我想查找丢失的数据..我的数据在每 30 秒的数据中,如果缺少某些数据..如何找到这些数据?
  • @NehaB - 阅读文档,做一些教程,练习示例。考虑问题并尝试找出解决方案 - 保持简单。
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2011-03-27
  • 2020-01-08
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多