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

如何在Pandas DataFrame中基于年月列创建每月首日日期列?

解决方法:生成每月第一天的日期列

错误原因分析

你之前用calendar模块报错,是因为这些函数(比如itermonthdays3、monthrange)只能接收单个标量值(单个年份/月份整数),但你传入的是Pandas的Series(整个列的数据),所以触发了"Series布尔值模糊"的错误——Pandas无法对整个Series直接执行需要单个值的函数。

正确实现方案

不需要用循环或calendar模块,Pandas本身提供了更高效的矢量化方法来处理日期生成,以下是两种可靠方式:

方式1:直接拼接字符串转日期(推荐,性能最优)

先把月份缩写转成数字,再拼接成年份-月份-01的格式,最后转成日期并格式化:

import pandas as pd

# 1. 转换月份缩写为数字(自动兼容大小写,比如jan/Feb都能识别)
df1['Month'] = pd.to_datetime(df1['Month'], format='%b').dt.month

# 2. 生成每月第一天的日期列,格式化为'日-月-年'
df1['Month_Year'] = pd.to_datetime(
    df1['Year'].astype(str) + '-' + df1['Month'].astype(str) + '-01'
).dt.strftime('%d-%m-%Y')

方式2:用lambda + apply逐行处理(适合需要自定义逻辑的场景)

如果一定要用lambda函数,可以结合apply逐行调用datetime构造函数:

import pandas as pd
from datetime import datetime

# 先转换月份为数字
df1['Month'] = pd.to_datetime(df1['Month'], format='%b').dt.month

# 使用lambda生成目标列
df1['Month_Year'] = df1.apply(
    lambda row: datetime(row['Year'], row['Month'], 1).strftime('%d-%m-%Y'),
    axis=1
)

验证结果

假设你的原始数据是:

MonthYear
jan2020
Feb2020
mar2021

处理后Month_Year列会生成:

Month_Year
01-01-2020
01-02-2020
01-03-2021

内容的提问来源于stack exchange,提问作者Faisal Rizvi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:05:20