如何在Python的Pandas中向下复制列非空值填充缺失项
解决Pandas DataFrame列非空值向下填充问题
你要实现的是把col1列的非空值向下复制,覆盖后续缺失项直到遇到下一个非空值,不用手动遍历行,Pandas有内置的高效方法可以直接搞定:
步骤1:构造示例数据(模拟你的原始DataFrame)
import pandas as pd import numpy as np df = pd.DataFrame({ 'col1': ['a', np.nan, 'b', np.nan, np.nan, 'c', np.nan], 'col2': [np.nan, 'x1', np.nan, 'y1', 'p1', np.nan, 'q1'], 'col3': [np.nan, 'x2', np.nan, 'y2', 'p2', np.nan, 'q2'] })
步骤2:执行向下填充
直接使用ffill()方法(forward fill的缩写,即向前填充),它会自动把最近的非空值向下填充到所有后续缺失项,直到遇到下一个非空值:
df['col1'] = df['col1'].ffill()
最终结果
处理后的DataFrame就是你要的目标格式:
| col1 | col2 | col3 | |
|---|---|---|---|
| 0 | a | NaN | NaN |
| 1 | a | x1 | x2 |
| 2 | b | NaN | NaN |
| 3 | b | y1 | y2 |
| 4 | b | p1 | p2 |
| 5 | c | NaN | NaN |
| 6 | c | q1 | q2 |
为什么手动遍历容易失败?
手动遍历行的时候,需要额外维护当前要填充的非空值状态,还要处理索引、空值判断等细节,很容易因为逻辑疏漏(比如没及时更新当前值、空值判断错误)导致结果不符合预期。而ffill()是Pandas专门为这类场景优化的函数,不仅代码简洁,处理大数据集的效率也远高于手动遍历。
注:如果使用的是旧版本Pandas,也可以用
df['col1'].fillna(method='ffill'),效果完全一致。
内容的提问来源于stack exchange,提问作者Przemek
相关产品推荐
相关产品推荐

