Python中DataFrame的YYMM格式日期转换为指定格式的方法求助
解决YYMM格式转指定日期格式的问题
别担心,这个问题很常见,我来帮你搞定!你之前用pd.to_datetime没得到预期结果,大概率是没指定正确的格式参数,导致pandas没法准确解析你的YYMM数据。
分步解决方案:
1. 正确解析YYMM为datetime对象
首先,我们需要明确告诉pandas你的日期格式是YYMM(两位年份+两位月份),用format='%y%m'参数就能让它准确识别。这里要注意两个细节:
- 如果你的列是整数类型(比如
9601),最好先转成字符串,还要用str.zfill(4)补全前导零到4位——避免像0012这种值被存储为整数12后,位数不足导致解析失败。 - 解析完成后,pandas会自动把日期设为当月的第一天,正好匹配你要的
01-01-YYYY中的日部分。
示例代码:
import pandas as pd # 假设你的DataFrame是df,目标列叫'yymm' df['yymm_str'] = df['yymm'].astype(str).str.zfill(4) # 转字符串并补全4位 df['datetime'] = pd.to_datetime(df['yymm_str'], format='%y%m')
2. 转换为目标字符串格式
如果需要得到01-01-1996这种字符串格式的结果,用dt.strftime()方法指定格式即可:
df['formatted_date'] = df['datetime'].dt.strftime('%d-%m-%Y')
完整示例
# 创建测试数据 data = {'yymm': [9601, 0012, 2305, 9911]} df = pd.DataFrame(data) # 处理并转换 df['yymm_str'] = df['yymm'].astype(str).str.zfill(4) df['datetime'] = pd.to_datetime(df['yymm_str'], format='%y%m') df['formatted_date'] = df['datetime'].dt.strftime('%d-%m-%Y') print(df)
输出结果:
yymm yymm_str datetime formatted_date 0 9601 9601 1996-01-01 01-01-1996 1 12 0012 2000-12-01 01-12-2000 2 2305 2305 2023-05-01 01-05-2023 3 9911 9911 1999-11-01 01-11-1999
补充说明
- 关于年份解析:pandas默认会把
00-69解析为2000-2069,70-99解析为1970-1999,这基本符合大多数场景的需求。如果有特殊年份规则,可以调整yearfirst或errors参数。 - 如果你只需要字符串格式,也可以尝试一步完成,但先转成datetime对象会更灵活,方便后续做日期筛选、运算等操作。
内容的提问来源于stack exchange,提问作者Paul Huynh
相关产品推荐
相关产品推荐

