如何给pandas datetime类型日期加天数直到达到指定的25号?
pandas日期调整为当月25号实现方案
原代码问题分析
- 对
date列单独使用apply时,lambda的入参x是单个datetime对象,不是包含date字段的行对象,x['date']的写法会直接报错 - 逻辑只实现了单次加1天,没有循环累加直到日为25,自然达不到需求
- 逐行循环的实现方案虽然能跑出正确结果,但数据量较大时效率极低,优先使用pandas向量化操作
场景1:统一调整为当月25号(匹配给出的样例需求)
无论原日期的日是多少,直接替换为当月25号,实现代码如下:
import pandas as pd # 先将date列转为datetime类型 df['date'] = pd.to_datetime(df['date']) # 直接计算和25号的差值,补到25号 df['date'] = df['date'] + pd.to_timedelta(25 - df['date'].dt.day, unit='d')
运行后输出和预期结果完全一致:
name date 0 Tom 2021-12-25 1 Sue 2021-11-25 2 Steve 2021-10-25
场景2:原日期超过25号时,向上调整为下个月25号
如果需要严格遵循「向上调整」的逻辑,即原日期日>25时取下个月25号,可以用如下实现:
df['date'] = pd.to_datetime(df['date']) # 先算出当月25号 month_25 = df['date'].dt.to_period('M').dt.to_timestamp() + pd.Timedelta(days=24) # 原日期比当月25号大的,就加一个月 df['date'] = month_25.where(df['date'] <= month_25, month_25 + pd.DateOffset(months=1))
内容的提问来源于stack exchange,提问作者mastrshayk
相关产品推荐
相关产品推荐

