You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:24:08