You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas将15分钟间隔数据转为小时均值分组及报错解决

问题描述

我有3列数据,所有列的数据类型均为object,第一列为Date列,第三列为Values列。数据示例如下:

Date           Values    Country 

01/01/21 12:00   2.       India
01/01/21 12:15   4.      India 
01/01/21 12:30   6.       India
01/01/21 12:45   8.     India

01/01/21 1:00.    10.   India
01/01/21 1:15.    20.   India
01/01/21 1:30.    30.   India
01/01/21 1:45.   40.     India

数据覆盖过去一年,共20000条记录。我希望将15分钟间隔的数据转换为小时间隔,输出结果中Values取均值,期望输出如下:

Date.             Values.   

01/01/21 12:00.   5.     India

01/01/21 1:00.    25.     India

尝试使用resample方法处理时出现报错:Only valid with datetimeindex,TimedeltaIndex or PeriodIndex but got an instance of RangeIndex(中文翻译:仅适用于DatetimeIndex、TimedeltaIndex或PeriodIndex,但当前为RangeIndex类型)

解决步骤
  • 转换Date列为datetime类型
    当前Date列是字符串(object)类型,必须先转为datetime类型才能进行时间相关操作:

    import pandas as pd
    df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%y %H:%M')
    

    注意format参数要和你的日期字符串格式匹配,示例中是日/月/年 时:分,所以用%d/%m/%y %H:%M,实际格式不同的话对应调整即可。

  • 将Date列设置为数据框索引
    resample方法要求数据框的索引必须是时间相关类型,所以把转换后的Date列设为索引:

    df = df.set_index('Date')
    
  • 按小时重采样并计算均值
    现在可以正常使用resample了,按小时('H')聚合,同时按Country分组,确保不同国家的数据分开计算均值:

    result = df.groupby('Country')['Values'].resample('H').mean().reset_index()
    

    最后用reset_index()把索引转回普通列,就能得到符合要求的输出格式。

  • 额外处理:转换Values列为数值类型
    由于Values列也是object类型,直接计算均值会出错,需要先转为数值型:

    df['Values'] = pd.to_numeric(df['Values'], errors='coerce')
    

    errors='coerce'会将无法转换的内容转为NaN,后续可根据需求处理这些缺失值。

内容的提问来源于stack exchange,提问作者Nitish Chaubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:01:06