用Python Jupyter实现XLSX的klokkeslett列按2小时间隔拆分时间存数组
Jupyter环境下XLSX时间列按2小时间隔分组实现
前置依赖安装
在Jupyter的代码单元格执行以下命令,安装数据处理所需的依赖包:!pip install pandas openpyxl
分步实现逻辑
读取目标XLSX文件,自动将
klokkeslett列解析为时间格式,避免手动格式转换的误差import pandas as pd # 替换为你的实际XLSX文件路径 df = pd.read_excel( "目标文件.xlsx", engine="openpyxl", parse_dates=["klokkeslett"] )定义分组规则
- 分组起点为08:00:00,按2小时间隔划分区间:08:00-10:00、10:00-12:00……
- 采用左闭右开的区间边界,即08:00:00整的条目归入第一组,10:00:00整的条目归入第二组,避免重复计数
批量生成分组匹配关系
# 提取时间列的小时数值(含分、秒换算为小数) hour_value = df["klokkeslett"].dt.hour + df["klokkeslett"].dt.minute/60 + df["klokkeslett"].dt.second/3600 # 生成分组边界:从8点开始,每2小时一个分界,覆盖文件内所有时间点 start_time = 8 time_step = 2 max_hour = hour_value.max() bin_edges = list(range(start_time, int(max_hour) + time_step + 1, time_step)) # 生成对应分组标签 group_names = [f"{bin_edges[i]:02d}:00-{bin_edges[i+1]:02d}:00" for i in range(len(bin_edges)-1)] # 为每条数据匹配对应分组 df["所属时间组"] = pd.cut( x=hour_value, bins=bin_edges, labels=group_names, right=False # 开启左闭右开规则 )按分组拆分为独立存储数组
grouped_storage = {} for group_label, rows in df.groupby("所属时间组", observed=True): # 移除临时添加的分组列,保留原始数据并转为数组格式 grouped_storage[group_label] = rows.drop(columns=["所属时间组"]).values
结果验证
在Jupyter单元格执行对应命令即可查看存储结果:
- 查看所有已生成的分组名称:
list(grouped_storage.keys()) - 查看指定区间的存储数组:比如调取08:00-10:00区间的条目,执行
grouped_storage["08:00-10:00"] - 数组为numpy.ndarray格式,支持常规数组索引、遍历操作,可直接用于后续分析
常见适配调整
- 如果
klokkeslett列读取后是字符串格式,先执行转换:df["klokkeslett"] = pd.to_datetime(df["klokkeslett"], format="%H:%M:%S")再走后续流程 - 如果文件中存在早于08:00的时间条目,仅需将
start_time参数调整为早于文件内最小时间的整数值,即可把这类条目纳入分组范围 - 如果需要修改区间长度,仅需调整
time_step参数为目标间隔小时数即可
内容的提问来源于stack exchange,提问作者André Lund
相关产品推荐
相关产品推荐

