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

如何用Python函数结合Pandas DataFrame查找缺失日期数据

问题描述

我有一个Pandas DataFrame,需要编写函数返回过去3天内该DataFrame中未记录的日期与对应姓名。

示例DataFrame(df1)如下:

datename
2022-08-05Alex
2022-08-07Alex

我尝试编写了如下checker函数:

def checker (table, name):
    if len(table[table.names == name]) == 3:
        msg = '\n All good'
    else:
        name_list = [*table['name'].unique()]
        msg = '\n No data for:'
        for name in name_list:
            msg += f'\n {name}'
    return msg

请问如何在返回信息中添加缺失的日期?或者是否可以优化该函数?我需要的输出格式为包含缺失日期与姓名的信息,例如:

2022-08-06 Alex

优化解决方案

实现思路

要精准找出目标日期范围内的缺失记录,核心步骤是:

  1. 标准化日期格式,确保能进行日期运算
  2. 生成目标时间范围内的完整日期序列
  3. 为每个姓名生成该范围内的所有预期记录组合
  4. 对比原DataFrame,筛选出不存在的组合

完整代码

import pandas as pd
from datetime import timedelta

def checker(table, target_name=None):
    # 转换日期列为datetime类型,避免字符串格式冲突
    table['date'] = pd.to_datetime(table['date'])
    
    # 生成过去3天的连续日期序列(以数据中最晚日期为基准往前推2天)
    max_date = table['date'].max()
    date_range = pd.date_range(start=max_date - timedelta(days=2), end=max_date)
    
    # 确定要检查的姓名:支持指定单个或检查所有唯一姓名
    names_to_check = [target_name] if target_name else table['name'].unique()
    
    missing_records = []
    for name in names_to_check:
        # 生成该姓名在目标日期范围内的所有预期记录
        expected = pd.DataFrame({'date': date_range, 'name': name})
        # 找出原表中不存在的记录
        missing = expected[~expected.set_index(['date', 'name']).index.isin(table.set_index(['date', 'name']).index)]
        # 转换为要求的字符串格式并收集
        for _, row in missing.iterrows():
            missing_records.append(f"{row['date'].strftime('%Y-%m-%d')} {row['name']}")
    
    # 返回结果
    return '\n'.join(missing_records) if missing_records else "All good"

# 测试示例
df1 = pd.DataFrame({
    'date': ['2022-08-05', '2022-08-07'],
    'name': ['Alex', 'Alex']
})

print(checker(df1))

代码说明

  • 日期兼容:自动转换date列为datetime类型,适配各种日期字符串格式
  • 灵活范围:基于数据中的最晚日期生成连续3天,无需手动指定时间范围
  • 精准匹配:通过索引对比快速找出缺失记录,比逐行遍历更高效
  • 多场景支持:可指定单个姓名检查,也能批量检查所有姓名的缺失情况

测试输出

运行代码后,输出符合需求:

2022-08-06 Alex

内容的提问来源于stack exchange,提问作者Kurasao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:43:17