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

如何高效合并Pandas的DataFrame与Series以填补空值?

高效合并DataFrame与Series填充空值的方法

原始数据

import pandas as pd

_df = pd.DataFrame({'a': [1, '', '', 4], 'b': ['apple', 'banana', 'orange', 'pear']}, columns=['a', 'b'])
_series = pd.Series(['', 2, 3, ''], name="a")

需求

沿a列合并两者,消除所有空值,得到如下结果:

a    b
0  1  apple
1  2  banana
2  3  orange
3  4  pear

低效的循环实现

原方法通过Python循环遍历赋值,大数据量下速度极慢:

for i in range(len(_df.iloc[:, 0].to_list())):
    if _df.iloc[i, 0] == '':
       _df.iloc[i, 0] = _series[i]

高效实现方案

以下均为Pandas向量化操作,底层由C实现,性能远优于Python循环:

方法1:使用mask直接替换空值

直接判断_df['a']的空字符串位置,用_series对应值替换,最后转整数类型:

_df['a'] = _df['a'].mask(_df['a'] == '', _series).astype(int)

方法2:使用where反向判断

逻辑与mask相反,保留非空值,空值位置替换为_series的值:

_df['a'] = _df['a'].where(_df['a'] != '', _series).astype(int)

方法3:使用combine_first合并填充

先将空字符串转为Pandas缺失值pd.NA,再用combine_first合并(该方法会自动用右侧值填充左侧缺失值):

_df['a'] = _df['a'].replace('', pd.NA).combine_first(_series.replace('', pd.NA)).astype(int)

方法4:使用fillna填充缺失值

同样先转换空字符串为缺失值,再用_series填充:

_df['a'] = _df['a'].replace('', pd.NA).fillna(_series).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:10:23