Python代码求助:从15分钟间隔数据提取小时级子集
解决15分钟间隔数据提取小时整点数据的问题
原代码问题分析
原代码通过计算与起始时间的分钟差模60来筛选整点数据,容易因为时间戳精度问题(如存在毫秒/微秒)或起始时间本身不是整点,导致TimeDiff % 60 == 0的判断失效,最终筛选出的数据不全。
可靠解决方案
以下两种方法可以精准提取小时整点数据,无需均值等聚合计算:
方法一:直接筛选分钟数为0的行
因为数据是15分钟间隔,整点对应的分钟数必然为0,直接检查时间的分钟部分即可:
final_TYP_hourly = final_TYP.copy() # 避免修改原数据集 final_TYP_hourly['DateTime'] = pd.to_datetime(final_TYP_hourly.index) # 筛选分钟数为0的整点数据 filtered_data = final_TYP_hourly[final_TYP_hourly['DateTime'].dt.minute == 0] filtered_data.reset_index(drop=True, inplace=True) print(filtered_data) print(f"筛选后数据条数:{len(filtered_data)}") # 预期为8760条
方法二:用resample提取整点数据(不聚合)
如果数据集的索引已经是DatetimeIndex,可以直接用resample按小时采样,取每个小时的第一条数据(即整点记录):
# 确保索引为DatetimeIndex final_TYP.index = pd.to_datetime(final_TYP.index) # 按小时划分区间,取每个区间的第一条数据 filtered_data = final_TYP.resample('H').first() filtered_data.reset_index(drop=True, inplace=True) print(filtered_data) print(f"筛选后数据条数:{len(filtered_data)}")
方案优势
- 方法一直接检查时间的分钟属性,不受起始时间和时间戳精度影响,只要数据包含整点记录就能准确筛选。
- 方法二利用pandas原生的时间采样功能,代码更简洁,适合规则时间间隔的数据集。
内容的提问来源于stack exchange,提问作者Jawairia
相关产品推荐
相关产品推荐

