将整数格式日期转换为对应月份最后一个工作日日期
实现将整数日期转换为当月最后一个工作日的方法
当然可以实现这个需求!借助Python的pandas库,我们可以轻松完成整数日期格式转换、获取当月最后一个工作日的操作,下面是具体的实现步骤和代码:
步骤说明
- 转换整数日期为日期格式:首先把
Date列的整数(如200801)转换成pandas可识别的日期类型,这里指定格式为%Y%m(年+月),转换后会默认当月第一天(比如200801变成2008-01-01)。 - 获取当月最后一个工作日:使用pandas的
BMonthEnd(Business Month End)偏移量,它会自动计算每个日期所在月份的最后一个工作日(跳过周末和默认的法定节假日)。 - 格式化输出日期:把计算得到的最后一个工作日格式化为
YYYY-MM-DD的字符串,存入新列Date2。
完整代码示例
import pandas as pd from pandas.tseries.offsets import BMonthEnd # 构造输入的DataFrame Input_DF = pd.DataFrame({ 'Product': ['A', 'C', 'B', 'B', 'C', 'A'], 'Date': [200801, 201503, 201002, 201704, 200605, 200805], 'Country': ['USA', 'AUS', 'UK', 'FIN', 'IRE', 'CAN'] }) # 步骤1:转换整数日期为日期类型 Input_DF['date_temp'] = pd.to_datetime(Input_DF['Date'], format='%Y%m') # 步骤2:计算当月最后一个工作日 Input_DF['Date2'] = Input_DF['date_temp'] + BMonthEnd(0) # 步骤3:格式化为指定的字符串格式(可选,若要保留datetime类型可省略此步) Input_DF['Date2'] = Input_DF['Date2'].dt.strftime('%Y-%m-%d') # 移除临时列,得到最终结果 Output_DF = Input_DF.drop('date_temp', axis=1) print(Output_DF)
运行结果
Product Date Country Date2 0 A 200801 USA 2008-01-31 1 C 201503 AUS 2015-03-31 2 B 201002 UK 2010-02-26 3 B 201704 FIN 2017-04-28 4 C 200605 IRE 2006-05-31 5 A 200805 CAN 2008-05-30
补充说明
- 如果需要适配特定国家的节假日,可以自定义
BMonthEnd的节假日日历,比如使用pandas.tseries.holiday模块来指定对应国家的节假日规则。 - 如果希望
Date2保留datetime类型而非字符串,可以去掉dt.strftime('%Y-%m-%d')这一步。
内容的提问来源于stack exchange,提问作者Alex_MN
相关产品推荐
相关产品推荐

