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

Pandas如何使用另一列非空值填充指定列的NaN缺失值

Pandas merge后同名列按规则填充实现

需求说明

Pandas做merge操作时如果两表存在同名列,会自动生成带_x、_y后缀的两列,本次填充规则为:

  • 保留col_x列所有原有非空值
  • 仅当col_x对应行值为NaN、且同行col_y值非空时,用col_y的值填充col_x的空位置

可复现测试样例

测试数据(补全原示例缺失的numpy依赖导入):

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'i': [0, 1, 2, 3],
                   'c': [np.nan, {'a':'A'}, np.nan, {'b':'B'}],
                   'd': [{'c':'C'}, np.nan, {'d':'D'}, np.nan]
                 })

样例中c对应待填充的col_x,d对应填充值来源col_y,期望输出为:

i         c         d
0  0  {'c':'C'}  {'c':'C'}      
1  1  {'a':'A'}       NaN
2  2  {'d':'D'}  {'d':'D'}
3  3  {'b':'B'}       NaN

实现代码

核心逻辑仅需1行,调用Pandas自带的fillna方法即可:

# 把列名替换成你自己merge后生成的_x、_y列名即可
df['c'] = df['c'].fillna(df['d'])

逻辑说明

  • fillna传入同长度、同索引的Series时,会逐行匹配填充:仅当前列值为NaN的位置,才会取传入Series对应行的值替换
  • 原列非空值不会做任何修改,完全保留
  • 如果某行col_x和col_y均为NaN,填充后该位置仍为NaN,不会产生异常值
  • 填充完成后如果不需要保留col_y列,直接执行df.drop(columns=['d'])(替换成你的_y列名)即可删除冗余列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:09:25