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

Python pandas如何替换DataFrame不在指定列表内的列值为NA

问题原因

你的代码存在连续赋值逻辑错误:Python的连续赋值是从右向左执行的,df[~df.isin(my_list)] = "NA" 这一步是直接对原df做原地替换,整个赋值表达式的返回值就是你赋的字符串"NA",把这个返回值赋值给df_new,自然只能拿到字符串,得不到修改后的DataFrame。

修正代码

推荐用pandas内置的where方法实现需求,逻辑是保留满足条件的值,不满足条件的值替换为指定内容,不会修改原始DataFrame:

import pandas as pd

# 示例数据构造(自己的环境里可跳过这步,直接用已有的df即可)
df = pd.DataFrame({
    'Animal': ['Cat', 'Dog', 'Rabbit'],
    'Color': ['Brown', 'White', 'Brown'],
    'Note': ['Friendly', 'Furry', 'Furry']
})
my_list = ['Dog', 'White', 'Friendly']

# 核心替换逻辑
df_new = df.where(df.isin(my_list), other="NA")

运行后得到的df_new输出如下,完全匹配替换规则:

Animal Color      Note
0     NA    NA  Friendly
1    Dog White        NA
2     NA    NA        NA

注:你给出的期望输出中第三行Note为Furry,但Furry不在你指定的my_list中,按照规则应该被替换为NA,属于写期望时的笔误。

如果你需要直接修改原始DataFrame,也可以用下面的写法,注意这种方式会覆盖原df的数据:

df[~df.isin(my_list)] = "NA"
df_new = df.copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:06:55