如何将Pandas列中仅含年月的字符串转换为指定格式datetime且不新增日信息
问题原因
你之前的代码失效是因为使用了错误的格式匹配符:%mmm%YY不是pandas支持的日期格式标识,正确的对应规则为:
%b匹配英文月份缩写(如JAN、FEB)%Y匹配4位年份(如2021、2022)
另外需要提前说明:pandas不存在仅包含年月的datetime类型,所有datetime类型底层都会携带完整的年月日信息,解析时会默认补充当月1日作为日值,这个操作不会修改你的原始数据,也不会影响年月维度的计算、筛选,完全满足需求。
可行实现方案
方案1:保留datetime计算能力(推荐)
如果后续需要对日期列做时间计算、范围筛选,优先选择此方案,转换后同时保留计算用的datetime列和展示用的格式列:
# 可选:如果环境locale不是英文,先执行这行确保能正确识别JAN这类英文月份缩写 # import locale # locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') # 1. 将原始字符串解析为datetime类型 df2['MONTH1_datetime'] = pd.to_datetime(df2['MONTH1'], format="%b%Y") # 2. 生成JAN-2021格式的展示列,转全大写匹配原始格式的大小写 df2['MONTH1_display'] = df2['MONTH1_datetime'].dt.strftime("%b-%Y").str.upper()
方案2:直接转换为指定格式的字符串
如果不需要做时间计算,只需要修改显示格式,直接用字符串切片处理即可,无需走日期解析逻辑:
df2['MONTH1'] = df2['MONTH1'].str[:3] + '-' + df2['MONTH1'].str[3:]
内容的提问来源于stack exchange,提问作者Wendy Velasquez
相关产品推荐
相关产品推荐

