解决字符串转datetime类型后日期被篡改的问题
解决Pandas转换时间列时日期被篡改的问题
问题原因
当使用pd.to_datetime()处理仅包含时间(无日期)的字符串时,Pandas会自动为其附加一个默认日期(通常是代码运行当天的日期,这里显示的2023-12-29就是该情况),而非关联到order_date列的正确日期。
解决方案
根据需求选择以下两种方式:
1. 仅保留时间部分
如果只需要提取时间信息,指定时间格式后提取time类型:
# 指定时间格式解析order_time,提取时间部分 df['order_time'] = pd.to_datetime(df['order_time'], format='%I:%M:%S %p').dt.time
处理后order_time列仅显示11:38:36这类时间值,无多余日期。
2. 合并日期与时间为完整datetime
如果需要完整的日期时间数据,将order_date的日期与order_time的时间拼接后转换:
# 拼接日期和时间字符串,转换为完整datetime df['full_order_datetime'] = pd.to_datetime( df['order_date'].astype(str) + ' ' + df['order_time'], format='%Y-%m-%d %I:%M:%S %p' )
这样得到的full_order_datetime列会是2023-01-01 11:38:36这类正确的完整日期时间值。
关键说明
- 必须指定
format='%I:%M:%S %p':因为你的时间是12小时制带AM/PM标识,这个格式能准确解析时间字符串,避免Pandas自动推断出错。 %I对应12小时制的小时数,%p匹配AM/PM,%M和%S分别对应分钟和秒。
内容的提问来源于stack exchange,提问作者Nelo_baby
相关产品推荐
相关产品推荐

