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

Python Pandas判断列含'X'赋值时所有结果均为YES的问题

问题根因

你的代码存在两处逻辑错误,是导致Column2全为'YES'的直接原因:

  • 循环内的判断条件df['Column1'].str.contains('X').any()作用范围是整个Column1列:只要整列里存在任意一个包含'X'的单元格,该条件就返回True,完全没有和当前遍历的行做关联
  • 条件分支内直接对整列df['Column2']赋值,而非针对当前行修改值,最终全列会被最后一次循环的判断结果覆盖,自然所有行值一致。

另外pandas做这类逐行条件赋值不需要手写for循环,向量化实现性能比循环高几个量级,也不容易写错。

正确代码

推荐方案(向量化实现,生产环境首选)

借助numpy.where做批量条件判断赋值即可,一行代码搞定:

import numpy as np

# 若Column1存在空值,添加na=False参数可避免contains返回空值导致报错
df['Column2'] = np.where(
    df['Column1'].str.contains('X', na=False),
    'YES',
    'NO'
)

循环实现(仅作逻辑演示)

注意:该写法性能极差,数据量大时运行速度会比向量化写法慢几十到上百倍,非必要不要使用

for idx, row in df.iterrows():
    if 'X' in str(row['Column1']):
        df.loc[idx, 'Column2'] = 'YES'
    else:
        df.loc[idx, 'Column2'] = 'NO'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:27:47