如何为pandas DataFrame补全缺失分钟级时间戳并填充None得到固定1440行
解决方案
首先处理时间序列补全缺失值,代码示例如下:
import pandas as pd import matplotlib.pyplot as plt # 假设你已加载的原始数据DataFrame命名为df # 1. 转换时间列格式 df['timestamp'] = pd.to_datetime(df['timestamp']) # 2. 计算每条数据对应的天内分钟数(0点对应0,23:59对应1439) df['minute_of_day'] = df['timestamp'].dt.hour * 60 + df['timestamp'].dt.minute # 3. 单分钟去重,同一分钟如果有多条采集数据保留第一条,可按需替换为均值等聚合逻辑 df = df.drop_duplicates(subset='minute_of_day', keep='first') # 4. 生成全天1440分钟的完整索引,补全缺失行 full_minute_index = pd.Index(range(1440), name='minute_of_day') df_full = df.set_index('minute_of_day').reindex(full_minute_index).reset_index() # 5. 补全缺失行的timestamp为对应整分钟时间,空值替换为None df_full['timestamp'] = pd.to_datetime(df_full['minute_of_day'], unit='m').dt.strftime('%H:%M:00') df_full['value'] = df_full['value'].where(df_full['value'].notna(), None)
处理完成的df_full固定为1440行,缺失时段的value值已自动填充为None,符合需求。
后续绘图代码如下,可直接满足x轴范围(0,1440)、y轴范围(0,100)的要求:
plt.figure(figsize=(20, 6)) plt.plot(df_full['minute_of_day'], df_full['value'], linewidth=1, marker='.', markersize=3) # 固定轴范围 plt.xlim(0, 1440) plt.ylim(0, 100) # 可选:优化x轴刻度,每2小时显示一次 plt.xticks(range(0, 1441, 120), [f'{h}:00' for h in range(0, 25, 2)]) plt.xlabel('当日时间(分钟)') plt.ylabel('传感器采集值') plt.grid(alpha=0.3) plt.show()
注意事项
- 如果你的数据包含多天,需要先按日期字段分组后,对每个日期的分组单独执行上述补全逻辑
- 同一分钟内多条采集数据的处理逻辑可按需调整,比如先按
minute_of_day分组对value取均值再做补全 - matplotlib会自动跳过value为NaN/None的点位,不会绘制无效的连续线段,符合缺失值的常规展示需求
内容的提问来源于stack exchange,提问作者Ricky Palaguachi
相关产品推荐
相关产品推荐

