将Pandas中日期与时间字符串列合并为单个datetime类型列
问题:将Pandas中的日期时间字符串列合并为datetime类型
原始DataFrame数据:
date time 0 Wed Mar 1 2023 7:00p 1 Sun Mar 12 2023 9:00p
两列均为字符串类型,时间中的p代表PM,且所有时间均为下午。需要将两列合并为单个datetime类型列,最终格式为dd/mm/yyyy hh:mm。
你之前的问题点
你手动移除日期前缀、替换月份缩写时,空格替换未生效,核心原因是变量名写错了:你定义的替换字典是date_replace,但调用replace时用的是month_replace,导致空格替换的规则根本没被执行。而且手动拼接转换的方式效率确实很低,完全可以用Pandas内置的日期解析函数一步到位。
高效解决方案
直接利用pd.to_datetime解析拼接后的日期时间字符串,无需手动替换:
import pandas as pd # 示例数据 data = { 'date': ['Wed Mar 1 2023', 'Sun Mar 12 2023'], 'time': ['7:00p', '9:00p'] } df = pd.DataFrame(data) # 1. 拼接日期和时间字符串 df['datetime_combined'] = df['date'] + ' ' + df['time'] # 2. 解析为datetime类型,指定格式匹配原始字符串 df['date'] = pd.to_datetime(df['datetime_combined'], format='%a %b %d %Y %I:%M%p') # 3. 转换为你需要的显示格式(如果需要字符串格式,否则保持datetime类型即可) df['date'] = df['date'].dt.strftime('%d/%m/%Y %H:%M') # 清理临时列(可选) df.drop('datetime_combined', axis=1, inplace=True)
执行后得到的结果:
date 0 01/03/2023 19:00 1 12/03/2023 21:00
格式参数说明
%a:匹配星期缩写(如Wed、Sun)%b:匹配月份缩写(如Mar)%d:两位数字的日期(不足补0)%Y:四位数字的年份%I:12小时制的小时数%M:两位数字的分钟数%p:匹配AM/PM标识(自动识别p为PM,转换为24小时制)
如果不需要补0的日期/月份(比如期望1/3/2023而非01/03/2023),可以把strftime的格式改成%-d/%-m/%Y %H:%M(Linux/macOS)或%#d/%#m/%Y %H:%M(Windows)。
内容的提问来源于stack exchange,提问作者zanmus
相关产品推荐
相关产品推荐

