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

如何为Pandas DataFrame列的非NaN位置赋值新列表值

解决方案

你已经通过df["value"].notnull()拿到筛选非NaN值的布尔掩码,直接用该掩码定位目标列对应位置,按顺序传入新值列表完成赋值即可,pandas会自动按掩码命中的行顺序匹配列表元素。

完整可运行代码

import pandas as pd
import numpy as np

# 构造测试数据集
d = {
    't': [0, 1, 2, 0, 2, 0, 1],
    'input': [2, 2, 2, 2, 2, 2, 4],
    'type': ['A', 'A', 'A', 'B', 'B', 'B', 'A'],
    'value': [0.1, 0.2, np.nan, np.nan, 2, 3, np.nan],
}
df = pd.DataFrame(d)
new_value = [10, 15, 1, 18]

# 生成非NaN值的筛选掩码
mask = df["value"].notnull()
# 定位目标位置赋值
df.loc[mask, "value"] = new_value

运行结果

执行后打印DataFrame,输出如下,所有原非NaN位置的值已经按列表顺序替换完成,NaN值保持不变:

t  input type  value
0  0      2    A   10.0
1  1      2    A   15.0
2  2      2    A    NaN
3  0      2    B    NaN
4  2      2    B    1.0
5  0      2    B   18.0
6  1      4    A    NaN

注意事项

  • 赋值前要保证new_value的长度和掩码中True的数量完全一致,可以先执行print(mask.sum(), len(new_value))校验长度,避免触发长度不匹配报错
  • 不要使用链式索引写法df[mask]["value"] = new_value赋值,这种写法会触发SettingWithCopyWarning警告,还可能出现赋值不生效的问题,统一用df.loc做行列定位是官方推荐的稳妥写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:49:12