DataFrame中ddmmyyyy格式日期列拆分为月、年列的规则实现需求
解决DataFrame日期列拆分问题(按日调整月份和年份)
我来帮你搞定这个日期拆分的需求!针对你给出的规则,我用pandas写了一套简洁且可靠的解决方案,完美覆盖所有边界情况(比如12月下旬的年份进位):
步骤说明
- 转换日期格式:先把
Col1的字符串日期转为pandas的datetime类型,这样能轻松处理日期运算和月份进位。 - 调整日期:根据“日≤15用当前月,日>15用下月”的规则,对日期进行偏移——日大于15的日期直接加1个月,pandas会自动处理12月转次年1月的年份变化。
- 提取目标列:从调整后的日期中提取月份缩写(如
Feb)和年份,分别存入Col2和Col3。
完整代码示例
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({ 'Col1': ['13-02-2017', '22-01-2017', '27-12-2017'] }) # 1. 将Col1转为datetime类型,指定格式为dd-mm-yyyy df['Col1'] = pd.to_datetime(df['Col1'], format='%d-%m-%Y') # 2. 计算调整后的日期:日>15则加1个月,否则保持原日期 df['adjusted_date'] = df.apply( lambda row: row['Col1'] + pd.DateOffset(months=1) if row['Col1'].day > 15 else row['Col1'], axis=1 ) # 3. 提取月份缩写和年份到目标列 df['Col2'] = df['adjusted_date'].dt.strftime('%b') df['Col3'] = df['adjusted_date'].dt.year # 可选:删除中间辅助列,保留需要的列 df = df[['Col1', 'Col2', 'Col3']] print(df)
输出结果
Col1 Col2 Col3 0 2017-02-13 Feb 2017 1 2017-01-22 Feb 2017 2 2017-12-27 Jan 2018
关键细节解释
- 使用
pd.to_datetime并指定format='%d-%m-%Y',确保字符串日期被正确解析,避免因系统 locale 不同导致的解析错误。 pd.DateOffset(months=1)会智能处理月份进位:比如2017-12-27加1个月后自动变成2018-01-27,完全符合你的规则。strftime('%b')提取的是英文月份缩写(如Jan、Feb),如果需要其他语言的月份格式,可以调整参数(比如中文需要额外设置locale)。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

