Python 提取dataframe列的日期部分,并将其转换为当月的最后一个工作日
我有以下Python 提取dataframe列的日期部分,并将其转换为当月的最后一个工作日,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下df,其中Date元素是字符串,后跟YYYY.MM: df = Date Value 0 name 2019.06 1.0 1 string 2018.03 1.6 2 string 2017.12 1.0 3 string 2016.09 1.7 4 name 2018.09 6.0 ... 我想将Date列转换为当月的最后一个工作日(周一至周五)。 所以我可以得到这个输出: df =
df
,其中Date
元素是字符串,后跟YYYY.MM
:
df =
Date Value
0 name 2019.06 1.0
1 string 2018.03 1.6
2 string 2017.12 1.0
3 string 2016.09 1.7
4 name 2018.09 6.0
...
我想将Date
列转换为当月的最后一个工作日(周一至周五)。
所以我可以得到这个输出:
df =
Date Value
0 2019-06-28 1.0
1 2018-03-30 1.6
2 2017-12-29 1.0
3 2016-09-30 1.7
4 2018-09-28 6.0
...
我尝试了re.search
以搜索列中每个元素的日期部分开始,但我无法找到解决方案。拆分并添加月份:
d = pd.to_datetime(df['Date'].str.split().str[-1])
print(df.assign(Date=d + pd.offsets.BMonthEnd(1)))
需要明确的是,任何月份的最后一个工作日都是工作日(周一到周五),该月的日期值可能最高。所以你需要知道两件事,一个月的最后一天是什么,这是一个工作日吗?如果没有,那么一次一个日期向后移动,直到找到该日期的工作日。是的,我的意思是,通过工作日=工作日(周一到周五),这是有效的:不确定为什么需要拆分()
,但是pd.offsets.bmmonthend
很好。@r.ook数据看起来像name 2019.06
aaaaaaah,我认为这只是问题本身的错误格式。对我来说,这是个错误的假设!您需要导入才能使其工作。从pandas.tseries.offset导入BMonthEnd@Displayname你也可以像我一样导入它。为我工作(0.25.3)
Date Value
0 2019-06-28 1.0
1 2018-03-30 1.6
2 2017-12-29 1.0
3 2016-09-30 1.7
4 2018-09-28 6.0