如何将Pandas中categoricalDtype格式的时间列转为datetime类型?
解决方法
错误原因
你的time_gap列是有序分类类型,其底层存储的是**Timedelta(时间间隔)**对象,而pd.to_datetime无法直接将时间间隔转换为日期时间(datetime),因此抛出类型转换错误。
简便转换方案
方案1:提取时分秒字符串转Datetime
先将分类值转为字符串,拆分出0 days后的时分秒部分,再直接转换为datetime类型(默认会自动拼接当前日期,若仅需时间部分可后续提取):
# 转换为字符串并拆分出时分秒段 df["time_gap"] = df["time_gap"].astype(str).str.split(" ", n=1).str[1] # 按时分秒格式转为datetime df["time_gap"] = pd.to_datetime(df["time_gap"], format="%H:%M:%S")
如果只需要时间部分(而非带日期的datetime),可以追加:
df["time_gap"] = df["time_gap"].dt.time
方案2:Timedelta转Datetime(基于基准日期)
先将分类值转为Timedelta,再与一个基准日期相加得到datetime类型:
# 转换为Timedelta类型 td_series = pd.to_timedelta(df["time_gap"]) # 加上基准日期生成datetime(这里用1970-01-01作为基准) df["time_gap"] = pd.Timestamp("1970-01-01") + td_series
这种方式得到的是带完整日期的datetime,若需仅保留时间显示,同样可以用.dt.time提取。
内容的提问来源于stack exchange,提问作者Para
相关产品推荐
相关产品推荐

