列表与字符串匹配判断失效,无法生成0/1标记列表求助
问题分析与修复
核心问题
- 数据格式错误:
landing_outcomes是包含单个长字符串的列表,这个字符串是Pandas Series的打印输出,无法直接和bad_outcomes中的值做比较。 - 比较逻辑错误:你的
any语句写法完全不符合需求,没有遍历每个结果条目进行判断。 - 列表操作错误:向列表添加单个元素应该用
append(),而不是+= 数字(这会触发类型错误)。
修复步骤与代码
步骤1:解析原始字符串,提取有效结果条目
先把landing_outcomes里的长字符串拆分,提取出每行的状态部分(比如True ASDS),忽略后面的计数和最后一行的元数据。
步骤2:遍历每个条目,判断是否属于不良结果,生成landing_class
对每个解析后的条目,若在bad_outcomes中则添加0,否则添加1。
修正后的代码:
# 原始列表值(包含单个长字符串的列表) landing_outcomes =['True ASDS 41\nNone None 19\nTrue RTLS 14\nFalse ASDS 6\nTrue Ocean 5\nFalse Ocean 2\nNone ASDS 2\nFalse RTLS 1\nName: Outcome, dtype: int64'] # 不良结果集合 bad_outcomes = {'False ASDS', 'False Ocean', 'False RTLS', 'None ASDS', 'None None'} landing_class = [] # 解析字符串:取出第一个元素,按换行拆分,过滤掉最后一行元数据 outcome_lines = landing_outcomes[0].split('\n')[:-1] # 遍历每个条目,提取状态部分并判断 for line in outcome_lines: # 提取每行前半部分的状态字符串(按空格分割,取前两个部分拼接) status = ' '.join(line.split()[:2]) # 判断并添加对应值 if status in bad_outcomes: landing_class.append(0) else: landing_class.append(1) print(landing_class)
运行结果
输出:[1, 0, 1, 0, 1, 0, 0, 0]
补充说明
如果landing_outcomes实际是Pandas Series而非字符串,直接用landing_outcomes.index就能获取所有状态条目,无需字符串解析:
# 假设 landing_outcomes 是Pandas Series for status in landing_outcomes.index: landing_class.append(0 if status in bad_outcomes else 1)
内容的提问来源于stack exchange,提问作者dls2235
相关产品推荐
相关产品推荐

