首页 > 解决方案 > 将数据框列转换为具有该月最后一个工作日的日期类型

问题描述

我有以下数据框df

       Date     number
0    AUG 17        1.0
1    AUG 17        1.6
2    FEB 18        1.0
3    MAR 18        1.7
4    APR 18        6.0
5    Jan 19        1.0
6    Apr 19        2.0
7    Jun 19        7.1
8    Jan 20        5.5
9    Feb 20        8.6

我想将该Date列转换为日期类型(当月的最后一个工作日(周一至周五)),以便获得以下输出:

            Date     number
0    2017-08-31        1.0
1    2017-08-31        1.6
2    2018-02-28        1.0
3    2018-03-30        1.7
4    2018-04-30        6.0
5    2019-01-31        1.0
6    2019-04-30        2.0
7    2019-06-28        7.1
8    2020-01-31        5.5
9    2020-02-28        8.6

注意我的一些月份是大写的。

我试过了:

date = [datetime.datetime.strptime(x,'%b%Y').date() for x in df['Date']]

但是让我给出匹配错误,我认为这是因为有些月份是大写字母。

标签: pythondataframedatetime

解决方案


这是你想要的?利用capitalize方法(在 中也可以使用pandas)来解析日期并添加一个偏移量pd.offsets来获得适当的工作日:

import pandas as pd
# example df:
df = pd.DataFrame({'Date': ['AUG 17', 'aug 17', 'FEB 18', 'MAR 18'], 
                   'number': [1, 1.6, 1, 1.7]})
# convert to datetime after capitalizing the month name, add offset so you can get last business day of month
df['Date'] = (pd.to_datetime(df['Date'].str.capitalize(), format='%b %y') + 
              pd.offsets.BMonthEnd(1))
# df
#         Date  number
# 0 2017-08-31     1.0
# 1 2017-08-31     1.6
# 2 2018-02-28     1.0
# 3 2018-03-30     1.7

推荐阅读