You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame中ddmmyyyy格式日期列拆分为月、年列的规则实现需求

解决DataFrame日期列拆分问题(按日调整月份和年份)

我来帮你搞定这个日期拆分的需求!针对你给出的规则,我用pandas写了一套简洁且可靠的解决方案,完美覆盖所有边界情况(比如12月下旬的年份进位):

步骤说明

  1. 转换日期格式:先把Col1的字符串日期转为pandas的datetime类型,这样能轻松处理日期运算和月份进位。
  2. 调整日期:根据“日≤15用当前月,日>15用下月”的规则,对日期进行偏移——日大于15的日期直接加1个月,pandas会自动处理12月转次年1月的年份变化。
  3. 提取目标列:从调整后的日期中提取月份缩写(如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:01