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

如何在Pandas中无需for循环将列中列表匹配值替换为nan

问题描述

现有如下DataFrame:

import pandas as pd
import numpy as np

test = {'x': [1.1, 1.2, 0.15, 20], 'y': [-111, -20, -1.9, -80]} 
df = pd.DataFrame(test)

另有数值列表 ls=[1.2, 0.15, 2.2],需要将df中"x"列与ls内数值相同的元素替换为nan。当前通过for循环实现:

for i in ls:
    df.loc[df['x'] == i, 'x'] = np.nan

希望找到无需for循环的实现方式,预期输出如下:

Indexxy
01.1-111
1nan-20
2nan-1.9
320-80
无循环解决方案

方法1:使用isin()结合布尔索引

利用pandas.Series.isin()快速判断元素是否在目标列表中,再通过布尔索引赋值:

df.loc[df['x'].isin(ls), 'x'] = np.nan

df['x'].isin(ls)会返回布尔Series,标记"x"列中属于ls的元素位置,通过loc定位后批量赋值为nan。

方法2:使用replace()方法

直接调用replace()批量替换目标值:

df['x'] = df['x'].replace(ls, np.nan)

replace()支持传入列表作为替换目标,自动将"x"列中所有匹配列表内的值替换为nan。

两种方法均能实现原循环的效果,且在数据量较大时效率显著更高。

内容的提问来源于stack exchange,提问作者Luckyboy. Jupiterchen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:09:25