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

DateTime格式处理问题:设置初始日期后自动推算跨天日期

我将两列原格式为'%H:%M'的数据转换为Datetime类型后,日期默认变为1900-01-01。我希望将第一行的日期设置为"2023-11-12",并让后续Actual Time列的日期能自动识别跨天情况,比如自动切换为2023-11-13及后续日期。

相关代码如下:

>> dfsched['Actual Time']= pd.to_datetime(dfsched['Actual Time'], format='%H:%M')
>> dfsched.head()

Engine Trip Arr/ Dept Schedule Time Actual Time
0 670.0 E9207 D 1900-01-01 06:12:00 1900-01-01 05:49:00
1 670.0 E9207 A 1900-01-01 06:22:00 1900-01-01 06:00:00
2 670.0 9207 D 1900-01-01 06:39:00 1900-01-01 06:39:00
3 670.0 9207 A 1900-01-01 06:43:00 1900-01-01 06:44:00
4 670.0 9207 D 1900-01-01 06:44:00 1900-01-01 06:45:00

解决方案

方法一:向量式高效处理(推荐)

利用Pandas的向量操作,无需逐行循环,适合大型数据集:

  1. 提取时间部分
# 从已转换的Datetime列中提取纯时间部分
time_part = dfsched['Actual Time'].dt.time
  1. 设置基准日期并标记跨天情况
# 第一行的目标基准日期
start_date = pd.to_datetime('2023-11-12')

# 判断当前行时间是否早于前一行,标记为跨天
cross_day = time_part < time_part.shift(1)

# 累计跨天次数,得到每行需要额外增加的天数
day_offset = cross_day.cumsum()
  1. 生成最终完整日期时间
# 组合基准日期、天数偏移和时间部分
dfsched['Actual Time'] = start_date + day_offset.astype('timedelta64[D]') + pd.to_timedelta(time_part.astype(str))

方法二:逐行遍历处理(适合小型数据集)

如果数据量不大,也可以逐行判断跨天:

# 替换第一行的日期为目标日期
dfsched.loc[0, 'Actual Time'] = pd.to_datetime('2023-11-12 ' + dfsched.loc[0, 'Actual Time'].strftime('%H:%M'))

# 从第二行开始遍历处理
for i in range(1, len(dfsched)):
    current_time = pd.to_datetime(dfsched.loc[i, 'Actual Time'].strftime('%H:%M')).time()
    prev_datetime = dfsched.loc[i-1, 'Actual Time']
    
    # 时间早于前一行则跨天,日期加1
    if current_time < prev_datetime.time():
        new_date = prev_datetime + pd.Timedelta(days=1)
        dfsched.loc[i, 'Actual Time'] = new_date.replace(hour=current_time.hour, minute=current_time.minute)
    else:
        # 不跨天则沿用前一行日期
        dfsched.loc[i, 'Actual Time'] = prev_datetime.replace(hour=current_time.hour, minute=current_time.minute)

说明

  • 方法一通过向量运算实现,处理速度远快于循环,优先推荐。
  • 两种方法都能自动识别跨天:当当前行时间早于前一行时,自动将日期递增1天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:28