如何在Pandas DataFrame中填充Time列缺失的连续秒级时间值
填充Pandas DataFrame中缺失的连续秒级时间值
问题描述
DataFrame的Time列中存在以'0'表示的缺失值,需要将这些值替换为前一个有效时间的下一秒,形成连续递增的秒级时间序列。
原始数据
import pandas as pd df = pd.DataFrame({ 'sec': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'Date': ['7/7', '0', '0', '7/7', '7/7', '0', '7/7', '7/7', '0', '0'], 'Time': ['12:47:30', '0', '0', '12:47:33', '12:47:34', '0', '12:47:36', '12:47:37', '0', '0'], 'rpm': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] })
解决方法
方法1:适用于整体时间序列连续的场景
如果所有有效时间本身就是连续的(仅中间存在'0'缺失值,无时间跳变),可以直接从第一个有效时间生成连续秒级序列:
from datetime import datetime, timedelta # 将'0'转为缺失值,同时转换为datetime类型 df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S', errors='coerce') # 获取起始时间,生成连续时间序列 start_time = df['Time'].dropna().iloc[0] df['Time'] = [start_time + timedelta(seconds=i) for i in range(len(df))] # 转换回字符串格式(按需选择) df['Time'] = df['Time'].dt.strftime('%H:%M:%S')
方法2:通用方法,支持时间跳变场景
如果数据中存在时间跳变(比如某个有效时间与前一个有效时间的间隔大于行数差),可以通过分组填充处理每个区间的缺失值:
# 将'0'转为缺失值,转换为datetime类型 df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S', errors='coerce') # 按有效时间划分分组:每个有效时间开启一个新组 df['group'] = df['Time'].notna().cumsum() # 对每个分组,从组内第一个有效时间开始,按行递增1秒 df['Time'] = df.groupby('group').apply( lambda x: x['Time'].iloc[0] + pd.to_timedelta(x.index - x.index[0], unit='s') ).reset_index(drop=True) # 转换回字符串格式并移除临时分组列 df['Time'] = df['Time'].dt.strftime('%H:%M:%S') df.drop('group', axis=1, inplace=True)
最终输出
执行代码后Time列将被填充为连续秒级时间,结果如下:
print(df) # 输出: sec Date Time rpm 0 1 7/7 12:47:30 0.0 1 2 0 12:47:31 0.0 2 3 0 12:47:32 0.0 3 4 7/7 12:47:33 0.0 4 5 7/7 12:47:34 0.0 5 6 0 12:47:35 0.0 6 7 7/7 12:47:36 0.0 7 8 7/7 12:47:37 0.0 8 9 0 12:47:38 0.0 9 10 0 12:47:39 0.0
内容的提问来源于stack exchange,提问作者appu
相关产品推荐
相关产品推荐

