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

如何在Pandas中获取datetime64时间区间内的缺失日期?

嘿,这个需求我刚好处理过,用Pandas几步就能搞定,给你详细拆解:

首先,先确保我们有可测试的原始数据(你可以直接替换成自己的df):

import pandas as pd

# 构造你的原始DataFrame
data = {
    'dti': ['2016-07-27 13:55:00', '2016-07-29 13:50:07', '2016-07-29 14:50:08',
            '2016-07-30 23:50:01', '2016-08-01 12:50:00', '2016-08-02 12:50:00'],
    'id_n': [1,1,1,2,3,3]
}
df = pd.DataFrame(data)
df['dti'] = pd.to_datetime(df['dti'])  # 确保字段是datetime64类型

接下来分三步获取缺失日期:

步骤1:提取去重的日期维度数据

因为你的dti带时分秒,我们只需要日期部分,同时去掉重复的日期(比如7-29出现了两次,只留一个即可):

# 把datetime向下取整到当日零点,再去重
existing_dates = df['dti'].dt.floor('D').unique()

步骤2:生成完整的日期序列

从原始数据的最小日期到最大日期,生成所有连续的单日序列:

# 获取日期范围的首尾(同样取整到当日)
min_date = df['dti'].min().floor('D')
max_date = df['dti'].max().floor('D')

# 生成连续日期序列,freq='D'表示按天生成
full_date_range = pd.date_range(start=min_date, end=max_date, freq='D')

步骤3:筛选出缺失的日期

找出完整序列中不在原始日期里的那些,就是我们要的缺失日期,最后转成DataFrame:

# 取反筛选缺失日期
missing_dates = full_date_range[~full_date_range.isin(existing_dates)]

# 转成目标DataFrame格式
result = pd.DataFrame(missing_dates, columns=['dti'])

运行后result就是你要的:

dti
0 2016-07-28
1 2016-07-31

如果想要把日期转成字符串格式(比如2016-07-28而不是datetime对象),可以加这一步:

result['dti'] = result['dti'].dt.strftime('%Y-%m-%d')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:27