如何在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
相关产品推荐
相关产品推荐

