Python Pandas中如何将无空格字符串日期转换为指定格式?
解决Pandas DataFrame日期列格式转换问题
先纠正一个关键细节
你提到的格式符号有个容易踩的坑:你写的%Y%M%D是错误的——大写%M代表分钟,大写%D代表美国式日期(mm/dd/yy),对应你输入的20221101(年-月-日8位字符串),正确的输入格式符号应该是%Y%m%d(小写%m是月份,小写%d是日期),这很可能是你之前转换失败的核心原因。
方法1:转为datetime类型再格式化(推荐)
先把字符串转成Pandas的datetime对象(方便后续做日期运算、筛选等操作),再格式化目标格式:
import pandas as pd # 示例数据 df = pd.DataFrame({'Date': ['20221101', '20220510']}) # 1. 把字符串转为datetime,指定输入格式为%Y%m%d df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d') # 2. 格式化为dd-mm-yyyy字符串 df['Date'] = df['Date'].dt.strftime('%d-%m-%Y')
执行后Date列就会变成01-11-2022、10-05-2022这样的格式。
方法2:直接字符串切片(无需转日期类型)
如果只是单纯需要字符串格式转换,不需要日期类型的功能,可以直接对8位字符串切片重组:
# 切片规则:前4位=年,中间2位=月,最后2位=日 df['Date'] = df['Date'].str[6:8] + '-' + df['Date'].str[4:6] + '-' + df['Date'].str[0:4]
这个方法更轻量,适合不需要后续日期操作的场景。
常见失败原因排查
- 格式符号错误:一定要区分大小写,比如用
%M(分钟)代替%m(月份)会直接导致转换失败; - 输入字符串有脏数据:如果
Date列存在非8位的字符串(比如长度不对、包含非数字字符),pd.to_datetime会报错,此时可以加errors='coerce'参数把无效值转为NaT,再排查脏数据:df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d', errors='coerce')
内容的提问来源于stack exchange,提问作者Claudio_TS
相关产品推荐
相关产品推荐

