用月份的最后一天替换日期

Replacing day in date with last day of month

我有一个包含列 'date' 的数据框,其中包含 yyyy-mm-dd 00:00:00。 Python 自动分配每个季度的第一天,但​​我想要同月的最后一天。

我试过:

cr_ind_ml_new = cr_ind_ml.replace(to_replace= '07-01', value='07-31', regex=True)

cr_ind_ml.replace('07-01', '07-31', inplace= True)

没有任何成功。

df 样本:

date value
1990-07-01 00:00:00 46.7
1990-10-01 00:00:00 54.2
1991-01-01 00:00:00 38.6
1991-04-01 00:00:00 20
1991-07-01 00:00:00 18.6

我要:

date value
1990-07-31 00:00:00 46.7
1990-10-30 00:00:00 54.2
1991-01-31 00:00:00 38.6
1991-04-30 00:00:00 20
1991-07-31 00:00:00 18.6

有没有人有想法?

如果你的df

                  date  value
0  1990-07-01 00:00:00   46.7
1  1990-10-01 00:00:00   54.2
2  1991-01-01 00:00:00   38.6
3  1991-04-01 00:00:00   20.0
4  1991-07-01 00:00:00   18.6

有一列date有字符串,那你可以用pd.to_datetime() and the MonthEnd()偏移量做

df['date'] = pd.to_datetime(df['date']) + pd.offsets.MonthEnd()

这给了你

        date  value
0 1990-07-31   46.7
1 1990-10-31   54.2
2 1991-01-31   38.6
3 1991-04-30   20.0
4 1991-07-31   18.6

但是:date 的元素现在属于 datetime 类型。如果 date 中的项目已经键入 datetime,那么您不需要 pd.to_datetime() 部分 - 只需添加偏移量就足够了。

如果你想要预期的输出为字符串,那么这个(从原来的开始)

df['date'] = (
    pd.to_datetime(df['date']) + pd.offsets.MonthEnd()
).dt.strftime('%Y-%m-%d %H:%M:%S')

给你

                 date  value
0  1990-07-31 00:00:00   46.7
1  1990-10-31 00:00:00   54.2
2  1991-01-31 00:00:00   38.6
3  1991-04-30 00:00:00   20.0
4  1991-07-31 00:00:00   18.6