如何用Pandas遍历列计算工作日并将NaTs转换为NaN?
Pandas计算事件日期与月/日的工作日天数
步骤说明
- 转换月/日列为完整日期:把每个月/日列的字符串和
Event Date的年份组合,生成当年的完整日期,无效日期(比如非闰年的2/29)会转为NaT。 - 计算工作日天数:用
pd.busday_count统计两个日期之间的工作日数量,NaT会自动转为NaN。 - 替换原列结果:把计算出的工作日天数替换原月/日列的值。
代码实现
import pandas as pd # 假设你的DataFrame已加载,且'Event Date'列是datetime类型 df = pd.read_csv('your_data.csv', parse_dates=['Event Date']) # 筛选出所有月/日列(排除'Event Date') month_day_columns = [col for col in df.columns if col != 'Event Date'] # 第一步:将月/日列转换为当年的完整日期 for col in month_day_columns: # 组合Event Date的年份与当前列的月/日,生成datetime df[col] = pd.to_datetime( df['Event Date'].dt.year.astype(str) + '-' + col, errors='coerce' # 无效日期转为NaT ) # 第二步:计算工作日天数 df[month_day_columns] = df[month_day_columns].apply( lambda col: pd.busday_count(col, df['Event Date']), axis=0 ) # 查看结果 print(df)
关键细节
pd.busday_count(start, end):统计start到end之间的工作日数量(不包含end),如果start晚于end会返回负数。errors='coerce':确保无效的月/日组合(如非闰年的2/29)转为NaT,后续计算自动转为NaN。- 若需要反向计算(即
Event Date到目标日期的工作日数),只需调换busday_count的参数顺序:pd.busday_count(df['Event Date'], col)
内容的提问来源于stack exchange,提问作者Amen_1990
相关产品推荐
相关产品推荐

