使用列内已知非空值向前填充DataFrame中NaN值的实现方法
高效实现方案
直接使用pandas内置的ffill()(前向填充)方法即可,该方法的逻辑完全匹配你的需求:自动取最近的非空Id值填充后续连续空值,直到遇到下一个非空Id值。
代码示例
import pandas as pd import numpy as np # 构造示例数据,可替换为你自己的DataFrame df = pd.DataFrame({ 'Id': [1, np.nan, np.nan, 2, np.nan, 3, np.nan, np.nan, np.nan], '无关列1': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], '无关列2': [10, 20, 30, 40, 50, 60, 70, 80, 90] }) # 仅需一行代码完成Id列填充 df['Id'] = df['Id'].ffill()
效果说明
- 原Id列值:
[1, nan, nan, 2, nan, 3, nan, nan, nan] - 填充后Id列值:
[1, 1, 1, 2, 2, 3, 3, 3, 3] - 该操作为向量化实现,底层基于C语言运行,比Python层的for循环效率高10~100倍,即使是百万级行数据也能快速处理,且不会修改其他无关列的内容。
- 若需要限制最多连续填充的空值数量,可添加
limit参数:df['Id'] = df['Id'].ffill(limit=最大填充数)
内容的提问来源于stack exchange,提问作者Prince Hermit
相关产品推荐
相关产品推荐

