You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas 1.0中如何从年份和月份生成日期型MonthIdx列

解决pandas中使用pd.to_timedelta处理年/月单位报错并生成月初日期的问题

这个问题我之前也碰到过!原因是pandas的pd.to_timedelta确实不再支持'M'(月)和'Y'(年)作为单位——毕竟不同月份天数不同,平年闰年的年长度也不一样,没法用一个统一的时间差来表示,所以官方就移除了这些单位的支持。

要生成你需要的MonthIdx列(即每个年-月的第一天),我们可以直接用pd.to_datetime来构造日期,这是更准确且高效的方式:

解决方案代码

import pandas as pd

# 模拟你的DataFrame结构
df = pd.DataFrame(
    {'Year': [2020, 2021, 2022], 'Month': [4, 4, 4]},
    index=[38, 65, 92]
)

# 核心步骤:组合Year、Month和固定的Day=1,生成当月第一天的日期
df['MonthIdx'] = pd.to_datetime(df[['Year', 'Month']].assign(Day=1))

# 如果需要将日期格式转为YYYY/MM/DD的字符串形式,添加这一行
df['MonthIdx'] = df['MonthIdx'].dt.strftime('%Y/%m/%d')

输出结果

运行后你的DataFrame会变成:

Year  Month    MonthIdx
38  2020      4  2020/04/01
65  2021      4  2021/04/01
92  2022      4  2022/04/01

为什么原来的方法不行?

pd.to_timedelta设计用来处理固定时长的时间差(比如天、小时、分钟这些单位,长度是固定不变的),而月和年的时长是动态变化的,无法用一个统一的数值来表示,所以pandas在后续版本中移除了对'M'和'Y'单位的支持,避免产生歧义。

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

火山引擎 最新活动