如何将含字符串DateTime的DataFrame转换为1分钟级时间序列
解决方案
步骤1:将字符串时间转换为datetime类型
用pandas.to_datetime()把dateTime列从字符串转为datetime格式,Pandas可自动识别YYYY-MM-DDTHH:MM:SS.fff格式,也可显式指定格式确保转换准确:
import pandas as pd # 原始数据 data = { 'dateTime': ['2020-10-31T23:18:00.000', '2020-10-31T23:25:00.000'], 'level': ['slow', 'moderate'] } df = pd.DataFrame(data) # 转换为datetime类型 df['dateTime'] = pd.to_datetime(df['dateTime'], format='%Y-%m-%dT%H:%M:%S.%f')
步骤2:生成1分钟级连续时间序列并填充level值
把转换后的dateTime设为索引,生成从起始时间到目标结束时间的1分钟频率序列,再用**向前填充(ffill)**重复前一个level值直到下一个变化点:
# 设置时间索引 df = df.set_index('dateTime') # 生成完整的1分钟时间序列:示例扩展到最后一个时间点+1分钟,可按需调整结束时间 start_time = df.index[0] end_time = df.index[-1] + pd.Timedelta(minutes=1) full_time_range = pd.date_range(start=start_time, end=end_time, freq='T') # 重新索引并向前填充level值 result_df = df.reindex(full_time_range).ffill().reset_index().rename(columns={'index': 'dateTime'}) # 可选:格式化时间显示(去掉毫秒,转为指定字符串格式) result_df['dateTime'] = result_df['dateTime'].dt.strftime('%Y-%m-%d %H:%M:%S')
运行后result_df即为目标格式的1分钟级时间序列,level会自动延续到下一个时间点的前一分钟,之后切换为新值并继续延续。
补充说明
- 若需生成到指定结束时间的序列,直接修改
end_time即可,比如end_time = pd.to_datetime('2020-10-31 23:30:00') ffill()会用前一个非空值填充后续空值,完全匹配“重复level值直至下一个变化点”的需求- 时间格式化步骤可选,若需保留datetime类型可直接跳过
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

