月份与年份分属不同列时如何获取对应月份的天数
解决方案
以下两种方案都可以实现从int类型的年、月字段获取对应月份天数:
方案1:使用calendar模块的monthrange函数
之前调用失败通常是因为直接把整列年、月传给了monthrange,该函数只支持接收单个int类型的年、月参数,需要通过apply逐行处理:
# 导入依赖 import pandas as pd import calendar # 假设你的DataFrame中存储年份的字段名为year,存储月份的字段名为month df['month_days'] = df.apply(lambda row: calendar.monthrange(row['year'], row['month'])[1], axis=1)
说明:calendar.monthrange(年, 月)返回的是元组(当月第一天对应的周几序号, 当月总天数),取下标为1的元素即可得到当月天数,会自动处理闰年2月的特殊情况。
方案2:使用pandas内置datetime方法,无需额外导入calendar
可以先把年、月字段拼接为datetime类型,直接调用内置属性获取天数,性能比逐行apply更高,适合数据量较大的场景:
# 一行写法直接生成天数字段 df['month_days'] = pd.to_datetime(df[['year', 'month']].assign(day=1)).dt.days_in_month
说明:这里先给年、月补了1号作为默认日期,转换为datetime类型后,dt.days_in_month属性可以直接返回对应月份的总天数。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

