Python如何基于另一Excel的时间戳范围筛选行并导出多工作表?
Python Excel时间范围筛选实现方案
前置依赖
需要用到pandas处理表格数据,openpyxl作为Excel读写引擎,提前执行命令安装:
pip install pandas openpyxl
核心实现思路
- 统一两个Excel的timestamp时间格式,全部转成pandas内置的datetime64类型,消除秒级和毫秒级的精度差问题
- 为excel1的所有时间点生成前后2秒的有效区间,合并为可快速判断的时间范围集合
- 第一次筛选:提取excel2中时间落在上述任意区间的所有行,作为新Excel第一个工作表的内容
- 第二次筛选:提取excel2中
isTrue值为false、且时间不在上述区间的所有行,作为新Excel第二个工作表的内容 - 将两个筛选结果写入同一个Excel的不同工作表,完成输出
注意:如果excel2的
isTrue列存储的是字符串类型的"false",后续筛选条件里的== False需要改成== "false"
可运行参考代码
import pandas as pd # 读取两个Excel文件,自动转换时间列格式 df1 = pd.read_excel("excel1.xlsx", parse_dates=["timestamp"]) df2 = pd.read_excel("excel2.xlsx", parse_dates=["timestamp"]) # 生成excel1所有时间点的±2秒有效区间 time_ranges = [] for t in df1["timestamp"]: start = t - pd.Timedelta(seconds=2) end = t + pd.Timedelta(seconds=2) time_ranges.append((start, end)) # 判断excel2每行时间是否落在有效区间 def check_time_valid(t): for start, end in time_ranges: if start <= t <= end: return True return False df2["range_flag"] = df2["timestamp"].apply(check_time_valid) # 分别筛选两个工作表的数据,删除辅助标记列 sheet1_data = df2[df2["range_flag"]].drop(columns=["range_flag"]) sheet2_data = df2[(df2["isTrue"] == False) & (~df2["range_flag"])].drop(columns=["range_flag"]) # 写入最终输出文件 with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer: sheet1_data.to_excel(writer, sheet_name="时间匹配行", index=False) sheet2_data.to_excel(writer, sheet_name="非匹配False行", index=False)
效果验证
针对你提供的示例数据,代码运行后输出和预期完全一致:
- 第一个工作表保留2条时间落在±2秒区间的行
- 第二个工作表保留1条isTrue为false且不在时间区间的行
内容的提问来源于stack exchange,提问作者bruna
相关产品推荐
相关产品推荐

