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

无法转换日期格式为yyyy-mm-dd h-m-s,时间差计算现0天错误求修正

时间差计算中的日期格式问题

我无法将日期格式转换为yyyy-mm-dd h-m-s格式,现有如下DataFrame df:

RT_Date             DateCreated
0   1/2/21 6:38         01-31-2021 14:38:12
1   1/2/21 2:58         01-31-2021 10:57:50
2   02-19-2021 17:59:00 02-19-2021 17:59:29
3   9/2/21 12:49        9/2/21 11:35

我编写了一段代码用于检查RT_Date与DateCreated之间是否存在30分钟以内的时间差,代码如下:

df['RT_Date'] = pd.to_datetime(df['RT_Date'])
df['DateCreated'] = pd.to_datetime(df['DateCreated'])

df['RT_Date'] = df['RT_Date'].dt.time
df['DateCreated'] = df['DateCreated'].dt.time

df['RT_Date'] = df['RT_Date'].astype(str)
df['DateCreated'] = df['DateCreated'].astype(str)

df['RT_Date'] = pd.to_timedelta(df['RT_Date'])
df['DateCreated'] = pd.to_timedelta(df['DateCreated'])

df['Diff'] = df['RT_Date'] - df['DateCreated']

df['Diff'] = df['Diff'].dt.total_seconds()

df['Diff'] = df['Diff']/60

df['Diff'] = df['Diff'].astype(int)

df['Diff'] = df['Diff'].abs()

df['Diff'] = df['Diff'].apply(lambda x: x <= 30)

运行后得到如下输出:

RT_Date         DateCreated     Diff
0   0 days 06:38:00 0 days 14:38:12 False
1   0 days 02:58:00 0 days 10:57:50 False
2   0 days 17:59:00 0 days 17:59:29 True
3   0 days 12:49:00 0 days 11:35:00 False

我对输出中RT_Date和DateCreated显示为“0 days”的情况感到困惑,请问如何修正该错误?


问题原因与修正方案

问题根源

代码中df['RT_Date'] = df['RT_Date'].dt.time和对应DateCreated的操作,直接丢弃了日期部分,只保留了时间信息。后续将时间转成字符串再转为timedelta类型,自然只会显示时间跨度(无日期时默认显示0 days)。更关键的是,丢弃日期后计算的时间差完全不符合实际逻辑——比如第0行两个日期差了近1个月,只算时间差毫无意义。

修正后的代码

import pandas as pd

# 构造原始DataFrame
data = {
    'RT_Date': ['1/2/21 6:38', '1/2/21 2:58', '02-19-2021 17:59:00', '9/2/21 12:49'],
    'DateCreated': ['01-31-2021 14:38:12', '01-31-2021 10:57:50', '02-19-2021 17:59:29', '9/2/21 11:35']
}
df = pd.DataFrame(data)

# 转换为完整datetime类型(保留日期+时间)
df['RT_Date'] = pd.to_datetime(df['RT_Date'])
df['DateCreated'] = pd.to_datetime(df['DateCreated'])

# 计算时间差(转成分钟数并取绝对值)
df['Diff'] = abs((df['RT_Date'] - df['DateCreated']).dt.total_seconds() / 60)

# 判断是否在30分钟以内
df['Diff'] = df['Diff'] <= 30

# 可选:将日期格式化为yyyy-mm-dd hh:mm:ss格式
df['RT_Date'] = df['RT_Date'].dt.strftime('%Y-%m-%d %H:%M:%S')
df['DateCreated'] = df['DateCreated'].dt.strftime('%Y-%m-%d %H:%M:%S')

print(df)

运行输出

RT_Date        DateCreated   Diff
0  2021-01-02 06:38:00 2021-01-31 14:38:12  False
1  2021-01-02 02:58:00 2021-01-31 10:57:50  False
2  2021-02-19 17:59:00 2021-02-19 17:59:29   True
3  2021-09-02 12:49:00 2021-09-02 11:35:00  False

核心修正点

  • 移除了提取.dt.time的步骤,保留完整的日期时间信息,确保时间差计算的真实性
  • 简化时间差计算流程,直接通过datetime相减转换为分钟数,避免多余的类型转换
  • 通过strftime方法将日期格式化为你需要的yyyy-mm-dd hh:mm:ss格式,解决初始的格式转换需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:15:05