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

如何在Pandas中按索引匹配,用指定Series填充多列NaN值?

用同一Series按索引匹配填充DataFrame多列NaN值的Pythonic实现

问题描述

我希望使用fillna命令,按索引匹配,用同一个Series填充Pandas DataFrame的多列NaN值。现有代码如下:

import numpy as np
import pandas as pd

df_1 = pd.DataFrame(index = [0, 1, 2], columns = ['a', 'b', 'c'], data = [[1, np.NaN, np.NaN], [2, np.NaN, 4], [np.NaN, 2, -3]])
series_1 = pd.Series([6, 5, 4], index = [0, 1, 2])

df_2 = df_1.fillna(series_2) # ???

期望输出为:

df_2 = pd.DataFrame(index = [0, 1, 2], columns = ['a', 'b', 'c'], data = [[1, 6, 6], [2, 5, 4], [4, 2, -3]])

有没有无需逐列调用fillna的Pythonic实现方式?

解决方案

方法1:将Series转换为同结构DataFrame后填充

把目标Series扩展成和原DataFrame列数一致、索引匹配的DataFrame,再直接用fillna填充:

import numpy as np
import pandas as pd

df_1 = pd.DataFrame(index=[0, 1, 2], columns=['a', 'b', 'c'], data=[[1, np.NaN, np.NaN], [2, np.NaN, 4], [np.NaN, 2, -3]])
series_1 = pd.Series([6, 5, 4], index=[0, 1, 2])

# 生成和原DataFrame列数匹配的填充DataFrame
fill_df = pd.DataFrame({col: series_1 for col in df_1.columns})

df_2 = df_1.fillna(fill_df)

方法2:用apply批量处理列

直接对DataFrame的每一列应用fillna,利用fillna自动按索引匹配的特性,一行代码搞定:

df_2 = df_1.apply(lambda col: col.fillna(series_1))

两种方法都无需逐列手动调用fillna,简洁高效,运行后均可得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:01:03