使用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

