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

如何在Pandas中为含NaN的Series添加列并跳过NaN值

解决将数组对应插入Series非NaN位置生成DataFrame的问题

嘿,这个需求很容易实现,我给你一步步拆解操作:

首先纠正一个小细节:你写的np.ndarray([2,1,0,4])其实应该用np.array()来创建数组,np.ndarray是底层构造函数,日常创建数组用np.array()更合适。

步骤1:导入依赖并定义原始数据

import pandas as pd
import numpy as np

# 原始带NaN的Series
s = pd.Series([8, np.NaN, 5, 6, np.NaN, 3])
# 要插入的数组(长度等于s中非NaN值的数量)
a = np.array([2, 1, 0, 4])

步骤2:生成对应位置的新Series

核心思路是先找到Series s中非NaN值的索引,再把数组a的值精准放到这些索引位置,其他位置保留NaN:

# 获取s中非NaN值的索引列表
non_nan_idx = s.dropna().index
# 创建一个和s长度、索引完全一致的全NaN Series
a_series = pd.Series(np.nan, index=s.index)
# 将数组a的值赋值到对应的非NaN索引位置
a_series.loc[non_nan_idx] = a

步骤3:合并生成目标DataFrame

把原Series和新生成的a_series合并成DataFrame即可:

res = pd.DataFrame({'s': s, 'a': a_series})

运行后得到的res就是你想要的结果:

s    a
0  8.0  2.0
1  NaN  NaN
2  5.0  1.0
3  6.0  0.0
4  NaN  NaN
5  3.0  4.0

如果想简化成一行代码,也可以这样写(可读性稍弱,但结果一致):

res = pd.DataFrame({
    's': s,
    'a': pd.Series(a, index=s.dropna().index).reindex(s.index)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:57:48