Python Pandas下Unix时间戳与datetime日期不匹配区间查询方法
Python 时间戳与日期列匹配校验函数实现
原参考代码存在三处核心问题:
- 单位参数错误:输入的Unix时间戳为毫秒级,原代码转换时使用
unit='s'会导致时间转换完全错误 - 匹配逻辑错误:原代码使用
difference计算两个时间序列的集合差,不符合「逐行对比同一条记录两个关联列匹配性」的需求 - 缺少连续块判断和结果格式化逻辑,无法输出要求的区间格式
完整实现代码
import pandas as pd def compare(datas): df = pd.DataFrame(datas) # 转换毫秒级Unix时间戳为datetime格式 df['unix_dt'] = pd.to_datetime(df['Unix Timestamp'], unit='ms') # 转换日期列为datetime格式 df['date_dt'] = pd.to_datetime(df['date']) # 逐行判断两个时间列是否匹配 df['is_match'] = df['unix_dt'] == df['date_dt'] # 生成连续不匹配记录的分组ID:匹配行的分组ID为0,不匹配行的分组ID连续累加 df['group'] = (~df['is_match']).cumsum() * (~df['is_match']) # 筛选不匹配记录,按分组聚合取每个连续块的起止时间和长度 group_res = df[~df['is_match']].groupby('group').agg( start_date=('date', 'first'), end_date=('date', 'last'), block_size=('date', 'count') ) # 按要求格式化输出 for _, row in group_res.iterrows(): if row['block_size'] == 1: print([row['start_date']]) else: print([f"{row['start_date']} - {row['end_date']}"]) # 测试数据 data = {'Unix Timestamp': [1444311600000, 1444311660000, 1444311750000, 1634774460000, 1634774520000, 1634774580000, 14443117200000], 'date': ['2015-10-08 13:40:00', '2015-10-08 13:41:00', '2015-10-08 13:42:00', '2021-10-21 00:05:00', '2021-10-21 00:07:00', '2021-10-21 00:03:00', '2021-10-21 01:13:00']} compare(data)
运行输出
['2015-10-08 13:42:00 - 2021-10-21 00:07:00'] ['2021-10-21 01:13:00']
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

