如何对DataFrame重采样?转换DateTimeIndex遇格式错误求解
解决DateTime解析错误与3小时重采样问题
刚看到你的问题,咱们一步步来搞定:先解决pd.to_datetime报的Unknown string format错误,再实现3小时间隔的重采样,方便后续构建滞后特征。
第一步:修复日期解析失败的问题
你遇到的解析错误,是因为pandas默认的日期解析器对YYYY/MM/DD HH:MM这种格式的识别偶尔会"卡壳",咱们显式指定时间格式就能完美解决,而且建议先转换列类型再设置索引,比先设索引再转换更稳妥:
# 先把Time Instant列转换成datetime类型,明确告诉pandas时间字符串的格式 Mi_Meteo['Time Instant'] = pd.to_datetime(Mi_Meteo['Time Instant'], format='%Y/%m/%d %H:%M') # 再将该列设置为索引 Mi_Meteo = Mi_Meteo.set_index('Time Instant')
这里的format='%Y/%m/%d %H:%M'对应你的时间格式:%Y是4位年份,%m是2位月份,%d是2位日期,%H是24小时制的小时,%M是分钟,给pandas明确的规则后就不会再报错啦。
第二步:实现3小时间隔的重采样
接下来做3小时重采样,这里要注意两个关键点:如果你的数据有多个传感器ID,必须先分组再重采样(避免不同传感器的数据混在一起);另外要根据需求选择聚合规则(比如取窗口内第一个值、均值等)。
情况1:数据包含多个Sensor ID
这种情况下一定要先按传感器分组,再进行重采样:
# 按Sensor ID分组,每3小时重采样,这里用first()取窗口内第一个数据点,你可以换成mean()/last()等 resampled_df = Mi_Meteo.groupby('Sensor ID').resample('3H').first().reset_index()
情况2:数据只有单个Sensor ID
如果你的数据里只有一个传感器,直接重采样就行:
resampled_df = Mi_Meteo.resample('3H').first().reset_index()
调整重采样的起始时间
如果希望重采样的时间点从当天00:00开始(就像你示例里的00:00、03:00这种对齐方式),可以加上origin='start_day'参数:
# 按当天00:00为起点对齐重采样窗口 resampled_df = Mi_Meteo.groupby('Sensor ID').resample('3H', origin='start_day').first().reset_index()
可选的聚合函数
你可以根据业务需求替换first():
last():取每个3小时窗口的最后一个数据点mean():计算窗口内的平均值sum():计算窗口内的总和max()/min():取窗口内的最大/最小值
最终效果
执行完上述代码后,你会得到和示例结构一致的DataFrame,时间索引会是标准的datetime格式,完全满足后续构建滞后特征的需求~
内容的提问来源于stack exchange,提问作者Dimi
相关产品推荐
相关产品推荐

