如何在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
相关产品推荐
相关产品推荐

