Pandas拆分日期时间Object列遇TypeError报错求助
问题分析与解决方法
核心问题
- 日期解析失败:
pd.to_datetime默认无法正确识别dd/mm/yyyy hh:mm格式,尤其是当日份大于12时,会被误判为月份,导致转换失败,进而引发后续类型错误。 - 代码语法疏漏:第二行代码漏写了
df,应为df['Start_Time'],但这不是主要报错原因。 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
相关产品推荐
相关产品推荐

