无法转换日期格式为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
相关产品推荐
相关产品推荐

