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

PDF提取表格后Pandas空值填充代码无反应问题排查

问题翻译

我从PDF中提取了一个表格,存在格式问题:该表格有两列,部分行的A列值与下一行的B列值错位,示例DataFrame如下:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['names'] = ['John','Mary',np.nan,'George']
df['numbers'] = ['1',np.nan,'2','3']

我希望将numbers列的空值填充为下一行的对应值,之后用.dropna()清理无效行。尝试了以下代码:

for i in range(len(df)):
  if df['numbers'][i] == np.nan:
    df['numbers'][i] = df['numbers'][i+1]

但DataFrame无变化且无报错,请问问题出在哪里?


问题根源

你用== np.nan判断空值的方式完全错误——np.nan和任何值(包括它自己)比较结果都是False,这是浮点数NaN的固有特性。所以你的循环里的判断条件永远不成立,自然不会执行赋值操作,DataFrame也就没变化。

正确解决方法

方法1:修正循环判断逻辑

把== np.nan换成pd.isna()或np.isnan()检测空值,同时注意循环边界避免索引越界:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['names'] = ['John','Mary',np.nan,'George']
df['numbers'] = ['1',np.nan,'2','3']

for i in range(len(df)-1):  # 最后一行无需处理,防止i+1超出索引范围
    if pd.isna(df['numbers'][i]):
        df['numbers'][i] = df['numbers'][i+1]

df = df.dropna()

方法2:用Pandas内置方法更高效

Pandas提供了bfill()(向后填充)方法,直接用下一行值填充当前空值,比循环简洁高效:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['names'] = ['John','Mary',np.nan,'George']
df['numbers'] = ['1',np.nan,'2','3']

# 先对numbers列向后填充空值,再删除无效行
df['numbers'] = df['numbers'].bfill()
df = df.dropna()

执行后得到的结果:

namesnumbers
0John1
1Mary2
3George3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:20:47