Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提取dataframe列的日期部分,并将其转换为当月的最后一个工作日_Python_Pandas_Dataframe - Fatal编程技术网

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