【问题标题】:Python code to average values during certain time periods in monthly dataPython代码在每月数据的特定时间段内取平均值
【发布时间】:2017-02-27 19:44:46
【问题描述】:

大家好,我有一个 cvs 文件,其中包含每小时间隔一个月的数据。我需要在整个月的 12:00am-3:00am 的时间间隔内获取其中一列的平均值。我正在使用 pandas.DataFrame 来尝试这样做。

我正在使用的数据示例

    DateTime    current     voltage
11/1/2014 12:00 1.122061402 4.058617834
11/1/2014 1:00  1.120534925 4.060912132
11/1/2014 2:00  1.119349897 4.058656072
11/1/2014 3:00  1.118277733 4.060912132
11/1/2014 4:00  1.120365636 4.060912132
11/1/2014 5:00  1.120365636 4.060912132

我想对整个月每天上午 12 点至凌晨 3 点的第 2 列进行平均。我在想对时间使用条件语句将是一个不错的选择,但是我不确定如何在日期/时间数据上实现该条件语句。

【问题讨论】:

  • df['DateTime'].resample('3H').mean()?
  • 如果我实施 3H 平均值,这将为我提供每 3 小时数据的平均值。我想在整个月的凌晨 12 点至凌晨 3 点的时间段内得到这个平均值。
  • 假设DateTime 是索引会这样吗? df.between_time('12:00', '3:00').resample('3H').mean()

标签: python python-3.x pandas dataframe


【解决方案1】:

我假设您已经将文件导入到名为 df 的 Pandas 数据框中。

  1. 通过检查df.dtypes 的值,确认您的“日期时间”字段被熊猫识别为日期时间。如果没有,请重铸例如与:

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

  2. 仔细检查上午 12 点、下午 1 点等时间是否处理得当。 (您没有在数据集中指出任何区分上午 12 点和下午 12 点等的内容。)如果没有,您将需要设计一种适当的方法来纠正它们或从原始来源重新导出它们。

    李>
  3. 从您的 DateTime 字段创建一个 DatetimeIndex:

    df = df.set_index(pd.DatetimeIndex(df['DateTime']))

  4. 现在采纳 Dmitry 的建议(稍作修改):

    >>> df.between_time('0:00', '3:00').resample('1D').mean()

结果的索引将显示平均时间间隔的开始。

已编辑以考虑 cmets 中的新信息。

【讨论】:

  • 谢谢你的作品。无论如何只对数据中的某些列执行 df.between_time 吗?我也可以将这些值保存到列表中吗?
  • 当然:例如,尝试list(df['current'].between_time('0:00', '3:00').resample('1D').mean()) 仅获取该时间范围内的平均当前值。
猜你喜欢
  • 2021-08-22
  • 2019-06-22
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2012-09-02
相关资源
最近更新 更多