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

Pandas:如何将列中不在指定字符串列表的值设为np.NaN

解决方案

可以通过Pandas的where方法结合isin筛选,直接将name列中不在指定列表内的所有值(包括空字符串、原有的np.NaN)替换为np.NaN:

import pandas as pd
import numpy as np

# 初始化原始DataFrame
df = pd.DataFrame({
    'name': ['foo','bar', '', 'blue', '', 'buzz', np.NaN ,'red', ''],
    'key': [1, 2, 3, 4, 5, 6, 7, 8, 9]
})

# 指定需要保留的字符串列表
values_to_keep = ['blue', 'red']

# 处理name列:仅保留列表内的值,其余设为np.NaN
df['name'] = df['name'].where(df['name'].isin(values_to_keep), np.NaN)

print(df)

执行后得到的结果如下:

name  key
0    NaN    1
1    NaN    2
2    NaN    3
3   blue    4
4    NaN    5
5    NaN    6
6    NaN    7
7    red    8
8    NaN    9

逻辑说明

  • df['name'].isin(values_to_keep)生成布尔序列,标记哪些值属于保留列表;
  • where方法会保留布尔值为True的原数据,将False的位置统一替换为np.NaN;
  • 原数据中的空字符串、np.NaN因不在保留列表中,都会被替换为np.NaN,完全匹配需求。

也可以用mask方法实现反向逻辑,效果一致:

df['name'] = df['name'].mask(~df['name'].isin(values_to_keep), np.NaN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19