python - 将数据框列转换为具有该月最后一个工作日的日期类型
问题描述
我有以下数据框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']]
但是让我给出匹配错误,我认为这是因为有些月份是大写字母。
解决方案
这是你想要的?利用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
推荐阅读
- oracle - 创建触发器时出现编译错误
- json - 发布到 Web Api 时实体类型的子级为空
- powerbi - 折线图中的数据点和直线
- python - 如何在 Python 中将数据从一个类传输到另一个类?
- c# - 如何避免使用 new 关键字进行实例化?
- firebase - Firebase 计划功能 - 无法部署
- c# - 将数据传递给 MVC 控制器时如何在单个参数中获取文件路径
- html - 在 nuxt.js 中使用 width:100vw 时有额外的空白
- php - 如何在 PHP 和 XML 中使用 foreach
- javascript - 有什么方法可以在课前或课后添加链接吗?