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

Pandas如何将DataFrame列中不在指定列表内的值替换为0

Pandas DataFrame 指定列仅保留预定义列表值的实现方案

错误原因

你编写的df.loc[~l1, 0, df.column]不符合loc方法的语法规则,触发TypeError的核心原因有两个:

  • ~是布尔值取反运算符,不能直接作用于普通列表l1
  • loc的标准入参格式为df.loc[行筛选条件, 列名],你传入了3个参数,参数格式错误。

高效实现方法

推荐使用pandas内置的向量化方法Series.isin()实现需求,该方法不需要遍历每行数据,即使处理百万级行的大表也有很高的性能:

方法1:直接修改原列

import pandas as pd

l1 = [1,2,5,6]
# 筛选列值不在预定义列表内的行,对应位置赋值为0
df.loc[~df['column'].isin(l1), 'column'] = 0

方法2:保留原列,生成新的预期列

# where方法会保留满足条件的原值,不满足条件的位置替换为指定的0
df['Expected column'] = df['column'].where(df['column'].isin(l1), 0)

运行效果验证

执行后输出结果和你要求的效果完全一致:

columnExpected column
11
55
22
30
40
30
66

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:18:00