Python 日期时间转换值错误

Python 日期时间转换值错误,python,pandas,datetime,Python,Pandas,Datetime,我有一个错误时间(24:00:00到26:18:00)的数据集,我想知道用python处理此类数据的最佳方法是什么 我尝试使用以下代码将列从object转换为datetime: stopTimeArrDep['departure_time'] = pd.to_datetime(stopTimeArrDep['departure_time']\ ,format='%H:%M:%S') 但我得到

我有一个错误时间(24:00:00到26:18:00)的数据集,我想知道用python处理此类数据的最佳方法是什么

我尝试使用以下代码将列从object转换为datetime:

stopTimeArrDep['departure_time'] =  pd.to_datetime(stopTimeArrDep['departure_time']\
                                                   ,format='%H:%M:%S')
但我得到了这个错误:

ValueError: time data '24:04:00' does not match format '%H:%M:%S' (match)
因此,我尝试添加
errors='compresse'
以避免此错误。但我最终得到的是空列,每行都添加了不需要的日期

stopTimeArrDep['departure_time'] =  pd.to_datetime(stopTimeArrDep['departure_time']\
                                                   ,format='%H:%M:%S',errors='coerce')
输出样本:

original_col    converted_col
23:45:00        1/1/00 23:45:00
23:51:00        1/1/00 23:51:00
24:04:00
23:42:00        1/1/00 23:42:00
26:01:00
任何关于处理此问题的最佳方法的建议。谢谢,

解决方案 如果有意义的话,您可以将
原始列
视为经过的时间间隔,而不是时间。您可以使用
datetime.timedelta
,然后将此
datetime.timedelta
添加到
datetime.datetime
以获取一些datetime对象;您最终可以使用它分别获取日期和时间

例子
从datetime导入datetime,timedelta
时间字符串=“20:30:20”
t=datetime.utcnow()
打印('t:{}'。格式(t))
HH,MM,SS=[int(x)表示时间上的x_string.split(':')]
dt=时间增量(小时=小时,分钟=毫米,秒=秒)
打印('dt:{}'。格式(dt))
t2=t+dt
打印('t2:{}'。格式(t2))
打印('t2.date:{}| t2.time:{}'。格式(str(t2.date())、str(t2.time()).split('.')[0]))
输出

t: 2019-10-24 04:43:08.255027
dt: 20:30:20
t2: 2019-10-25 01:13:28.255027
t2.date: 2019-10-25 | t2.time: 01:13:28
0   2019-10-25 09:38:39.349410
1   2019-10-25 09:44:39.349410
2   2019-10-25 09:57:39.349410
3   2019-10-25 09:35:39.349410
4   2019-10-25 11:54:39.349410
Name: t2, dtype: datetime64[ns]
为您的用例
#定义自定义函数
def进程行(时间字符串):
HH,MM,SS=[int(x)表示时间上的x_string.split(':')]
dt=时间增量(小时=小时,分钟=毫米,秒=秒)
返回dt
#制作虚拟数据
原件=[“23:45:00”、“23:51:00”、“24:04:00”、“23:42:00”、“26:01:00”]
df=pd.DataFrame({'original_col':original_col,'dt':None})
#进程数据帧
df['dt']=df.apply(λx:process_行(x['original_col']),轴=1)
df['t']=datetime.utcnow()
df['t2']=df['dt']+df['t']
#从时间戳中提取日期
df['Date']=[df['t2']中d的datetime.Date(d)]
#从时间戳中提取时间
df['Time']=[df['t2']中d的datetime.Time(d)
df
输出

使用
pandas.to\u datetime()
pd.to_datetime(df['t2'],格式='%H:%M:%S',错误='concurve')
输出

t: 2019-10-24 04:43:08.255027
dt: 20:30:20
t2: 2019-10-25 01:13:28.255027
t2.date: 2019-10-25 | t2.time: 01:13:28
0   2019-10-25 09:38:39.349410
1   2019-10-25 09:44:39.349410
2   2019-10-25 09:57:39.349410
3   2019-10-25 09:35:39.349410
4   2019-10-25 11:54:39.349410
Name: t2, dtype: datetime64[ns]
工具书类

  • 出现错误的原因是您的
    H
    值大于23:59:59(一天只有24小时)。这些值也不能被“强制”。如果您有日期和时间,您可以将日期提前到第二天&到达24小时后,时间可以从0开始。谢谢您的回复。我只有几次了。谢谢你的回复。我不知道如何将其反映到我的dataframe列中。你能给我澄清一下吗。谢谢,如果你考虑一个单行在<代码>原语>代码>,我上面提到的,可以应用到这一点。因此,您可以创建一个自定义函数,只需传入
    time\u字符串
    和一些datetime(作为参考:这将替换
    t
    ),然后输出t2。这可以应用于每一行,并最终存储在一个新列中。为此,您需要使用
    pandas.Series.apply
    。为了更清晰,我将添加更多内容。@leena请参见:部分,以获取您的用例为例。谢谢您的CypherX。但是时间列仍然是
    对象
    而不是
    日期时间