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
相关产品推荐
相关产品推荐

