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

Pandas拆分日期时间Object列遇TypeError报错求助

问题分析与解决方法

核心问题

  1. 日期解析失败:pd.to_datetime默认无法正确识别dd/mm/yyyy hh:mm格式,尤其是当日份大于12时,会被误判为月份,导致转换失败,进而引发后续类型错误。
  2. 代码语法疏漏:第二行代码漏写了df,应为df['Start_Time'],但这不是主要报错原因。
  3. datetime.time类型兼容性问题:pandas对Python原生datetime.time类型的支持不佳,直接赋值会触发类型转换错误。

解决代码

方案一:直接转换为字符串格式的日期和时间(推荐)

import pandas as pd

# 强制指定格式转换原列为datetime类型
df['Start_Time'] = pd.to_datetime(df['Start_Time'], format='%d/%m/%Y %H:%M')
df['End_Time'] = pd.to_datetime(df['End_Time'], format='%d/%m/%Y %H:%M')

# 提取日期为字符串
df['Start_Date'] = df['Start_Time'].dt.strftime('%d/%m/%Y')
df['End_Date'] = df['End_Time'].dt.strftime('%d/%m/%Y')

# 提取时间为字符串,避免datetime.time类型问题
df['Start_Time'] = df['Start_Time'].dt.strftime('%H:%M')
df['End_Time'] = df['End_Time'].dt.strftime('%H:%M')

方案二:保留日期为datetime.date类型

如果需要日期列保持原生日期类型,可以通过中间列过渡:

import pandas as pd

# 创建临时datetime列
df['Start_Time_dt'] = pd.to_datetime(df['Start_Time'], format='%d/%m/%Y %H:%M')
df['End_Time_dt'] = pd.to_datetime(df['End_Time'], format='%d/%m/%Y %H:%M')

# 提取日期为datetime.date类型
df['Start_Date'] = df['Start_Time_dt'].dt.date
df['End_Date'] = df['End_Time_dt'].dt.date

# 提取时间为字符串
df['Start_Time'] = df['Start_Time_dt'].dt.strftime('%H:%M')
df['End_Time'] = df['End_Time_dt'].dt.strftime('%H:%M')

# 可选:删除临时列
df.drop(columns=['Start_Time_dt', 'End_Time_dt'], inplace=True)

关键说明

  • 指定format='%d/%m/%Y %H:%M'是确保日期正确解析的核心,必须与你的数据格式完全匹配。
  • 用dt.strftime()转换时间为字符串,避免了datetime.time类型在pandas中的兼容性问题,同时保持时间的可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:25:27