如何从CSV计算员工日期差值?含空值填充与统计需求
员工在职天数计算与统计解决方案
问题分析
你的代码未生效主要有两个核心原因:
fillna默认不会修改原DataFrame,必须赋值回原列或使用inplace=True才会生效- 日期列若为字符串类型无法直接计算差值,需先转换为datetime格式
完整实现步骤
1. 导入依赖并读取数据
读取CSV文件时,同步将日期列转换为datetime类型(注意你的日期格式是日/月/年,需指定format参数匹配):import pandas as pd # 读取员工数据CSV df = pd.read_csv('你的员工数据文件名.csv') # 转换入职、离职日期为datetime类型 df['JoinDate'] = pd.to_datetime(df['JoinDate'], format='%d/%m/%Y') df['LeftDate'] = pd.to_datetime(df['LeftDate'], format='%d/%m/%Y')2. 填充离职日期空值
将空的LeftDate填充为2022年5月1日,确保修改原数据列:# 填充空值为指定日期 df['LeftDate'] = df['LeftDate'].fillna(pd.to_datetime('1/05/2022', format='%d/%m/%Y'))3. 计算每位员工在职天数
通过日期差值得到整数天数,存入新列TenureDays:# 计算在职天数 df['TenureDays'] = (df['LeftDate'] - df['JoinDate']).dt.days4. 统计核心指标
计算总天数、平均天数、最小/最大天数:# 统计关键指标 total_tenure = df['TenureDays'].sum() avg_tenure = df['TenureDays'].mean() min_tenure = df['TenureDays'].min() max_tenure = df['TenureDays'].max() # 打印结果 print(f"总在职天数:{total_tenure}") print(f"平均在职天数:{avg_tenure:.2f}") print(f"最短在职天数:{min_tenure}") print(f"最长在职天数:{max_tenure}")
额外注意事项
- 若CSV中日期格式不是
日/月/年,需调整format参数(比如%m/%d/%Y对应月/日/年) - 若存在离职日期早于入职日期的错误数据,可通过
df['TenureDays'] = df['TenureDays'].clip(lower=0)过滤负数
内容的提问来源于stack exchange,提问作者Samuel Tan
相关产品推荐
相关产品推荐

