You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何将DataFrame列的NaN值替换为上一行单元格值

pandas DataFrame前向填充空值实现方案

核心方法说明

pandas内置的ffill()(forward fill)方法可直接实现「用上一行非空值填充当前空单元格」的需求,处理流程分三步:

  • 先将所有pandas无法自动识别的无效值(空字符串、自定义空占位符等)统一替换为pd.NA
  • 对需要补全的列执行前向填充
  • 针对数据中日期错位存储的问题做额外清洗,得到规整数据集

具体实现代码

直接将以下逻辑追加到你现有代码的末尾即可:

# 1. 统一替换无效值为NaN,可根据实际数据里的无效占位符往列表中追加内容
df = df.replace(['', ' ', 'N/A', '--'], pd.NA)

# 2. 提取错位存储在Name列的日期(匹配「三位月份缩写+空格+1-2位日期」的格式,比如Jun 15)
df['Date'] = df['Name'].where(df['Name'].str.match(r'^[A-Z][a-z]{2} \d{1,2}$', na=False))

# 3. 对姓名、用户ID、日期三列执行前向填充,自动用上一行非空值补全空单元格
df[['Name', 'UserID', 'Date']] = df[['Name', 'UserID', 'Date']].ffill()

# 4. 过滤掉无状态明细的员工汇总行、日期行,重置索引得到最终干净数据集
df_clean = df.dropna(subset=['Reason', 'PresenceState']).reset_index(drop=True)

处理后效果

最终输出的df_clean中,每一条状态明细都会匹配到对应的员工姓名、用户ID、日期,不存在空值,示例结构:

NameUserIDReasonPresenceStateTotal_TimeDate
Aguilar, Bertrand2653Unavailable - BreakAway00:09:03Jun 15
Aguilar, Bertrand2653Unavailable - LunchAway00:32:07Jun 15
Aguilar, Bertrand2653Work - OutboundBusy00:00:00Jun 15
Aguilar, Sarah2546Unavailable - BreakAway00:21:38Jun 15
Aguilar, Sarah2546Unavailable - LunchAway00:30:00Jun 15

如果不需要提取单独日期列,也不需要过滤汇总行,直接执行df = df.ffill()即可对全表所有列做前向填充,满足最基础的空值补全需求。

内容的提问来源于stack exchange,提问作者Eestrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:54:24