如何在Pandas DataFrame中将"02-04-20189.45"格式字符串转为datetime类型?
解决Pandas中特殊格式日期字符串转datetime的问题
嘿,我太懂你这种被奇葩日期格式折腾的感受了——这个「日-月-年小时(24制).分钟」的格式居然把年份和小时直接连在一起,确实很坑!不过咱们用点字符串处理和正则的技巧就能轻松搞定,下面给你两种实用的方案:
方案1:分步拆分处理(直观易懂)
如果喜欢清晰的步骤,咱们可以把日期和时间部分拆开,再拼接成标准格式:
import pandas as pd # 假设你的DataFrame列名为`date_str` # 1. 拆分日期部分(前10位:日-月-年)和时间部分(剩余字符:小时.分钟) df['date_part'] = df['date_str'].str[:10] df['time_part'] = df['date_str'].str[10:] # 2. 把时间部分的点换成冒号,并且给1位小时补前导零(比如9.45 → 09:45) df['time_part'] = df['time_part'].str.replace('.', ':').str.zfill(5) # 3. 拼接成标准的日期时间字符串 df['datetime_str'] = df['date_part'] + ' ' + df['time_part'] # 4. 转换为datetime类型 df['datetime'] = pd.to_datetime(df['datetime_str'], format='%d-%m-%Y %H:%M') # 要是不需要中间列,可以直接删掉 df = df.drop(['date_part', 'time_part', 'datetime_str'], axis=1)
方案2:正则表达式一键转换(简洁高效)
如果想少写点代码,用正则表达式直接替换成标准格式是更高效的选择:
import pandas as pd # 用正则匹配并重构日期时间字符串 df['datetime'] = pd.to_datetime( df['date_str'].str.replace(r'(\d{2}-\d{2}-\d{4})(\d+)\.(\d{2})', r'\1 \2:\3'), format='%d-%m-%Y %H:%M', errors='coerce' # 可选:把格式错误的字符串转为NaT,方便后续排查 )
正则说明:
(\d{2}-\d{2}-\d{4}):匹配「日-月-年」的固定长度部分(比如02-04-2018)(\d+):匹配小时部分(1位或2位数字,比如9或19)\.(\d{2}):匹配分隔点和分钟部分(比如.45)- 替换后的
\1 \2:\3会把原字符串变成日-月-年 小时:分钟的标准格式,再用pd.to_datetime就能轻松识别了。
两种方案都能完美处理你给出的示例值"02-04-20189.45",转换后会变成2018-04-02 09:45:00的datetime类型~
内容的提问来源于stack exchange,提问作者chetan buye
相关产品推荐
相关产品推荐

