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

DataFrame列表类型列中值匹配逻辑异常排查求助

问题排查与解决

你的问题核心在于循环中对整个列赋值,而不是仅标记符合条件的单行。让我拆解一下:

错误原因分析

当你执行Questions["DL-flag"] = 1时,这行代码会把DL-flag列的所有行都设置为1,而不是当前循环到的那一行。只要循环中存在任意一行的Tags包含"deep-learning",整个列就会被覆盖为1,最终所有行都变成1,和预期不符。

正确解决方案(推荐向量化操作)

Pandas最擅长向量化操作,比循环高效得多。针对列表类型的列,我们可以用apply方法逐个检查每个列表是否包含目标值:

# 方法1:使用apply生成1/0标记
Questions["DL-flag"] = Questions["Tags"].apply(lambda x: 1 if "deep-learning" in x else 0)

# 方法2:结合numpy.where更直观
import numpy as np
Questions["DL-flag"] = np.where(Questions["Tags"].apply(lambda x: "deep-learning" in x), 1, 0)

如果一定要用循环(不推荐,效率低)

如果你坚持用循环实现,需要通过行索引来定位修改,并且要先初始化DL-flag列的默认值为0:

# 先初始化默认值为0
Questions["DL-flag"] = 0

# 遍历带索引的行
for idx, tags in Questions["Tags"].items():
    if "deep-learning" in tags:
        # 仅修改当前索引的行
        Questions.loc[idx, "DL-flag"] = 1

这样就能精准标记出所有Tags包含"deep-learning"的行,其他行保持0不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:09:06