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

Python处理Excel时如何自动填充Score列空单元格为上一行非空值

问题场景

需要处理Excel数据,将Score列的空单元格自动填充为同列上一个非空分数值:

  • 原始数据结构
|  Name   | Score | 
    |Alex     |  83.5 | 
    |Annie    |       |
    |Bob      |       |  
    |Lucy     | 243.1 |
    |David    |       |
    |Kate     |       |
    |Cathrine |       |
    |Rose     | 757.5 | 
    |Mary     |       |
    |Johnny   |       |
    |Roy      |       |
  • 预期处理结果
|  Name   | Score | 
 |Alex     |  83.5 | 
 |Annie    |  83.5 |
 |Bob      |  83.5 |  
 |Lucy     | 243.1 |
 |David    | 243.1 |
 |Kate     | 243.1 |
 |Cathrine | 243.1 |
 |Rose     | 757.5 | 
 |Mary     | 757.5 |
 |Johnny   | 757.5 |
 |Roy      | 757.5 |
原代码错误点

原编写的pandas代码存在3个问题,无法正常运行:

df = pd.read_excel('C:/Users/Data.xlsx')
for i, j in enumerate(df['Score']):
    if j() == '':
        df.at[i,'Score'] = df.at[i-1,'Score']
  • 语法错误:遍历得到的j是单元格的值,不是可调用的函数,写j()会直接触发运行报错
  • 空值判断逻辑错误:pandas读取Excel时,空单元格会被解析为浮点类型的空值NaN,不是空字符串'',判断条件永远不成立
  • 实现方式低效且有隐患:手动写循环遍历pandas数据运行效率低,若首行是空值,i-1会取到数据表最后一行的值,出现逻辑错误
正确实现方案

pandas内置了专门处理向前填充场景的ffill()(forward fill)方法,不需要手动写循环,一行代码即可实现需求:

import pandas as pd

# 读取原始Excel文件
df = pd.read_excel('C:/Users/Data.xlsx')
# 对Score列执行向前填充:空值自动取上一个非空值
df['Score'] = df['Score'].ffill()

# 如需将处理结果保存为新的Excel文件,取消注释下面一行即可
# df.to_excel('C:/Users/处理后的数据.xlsx', index=False)

补充说明:如果需要对整个数据表所有列都做「用上一个非空值填空」的操作,直接写df = df.ffill()即可,该方法是pandas原生实现,运行效率远高于手动写循环,也不会出现索引越界、判断逻辑失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:03:27