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

如何在Pandas DataFrame中匹配列表元素并替换对应列单元格内容

解决方案

实现思路

利用正则匹配兼容单元格内的格式差异,直接从文本中提取符合要求的crew编号,无需遍历列表也不用硬编码截断字符串,性能和可靠性都更高。

可直接运行的代码

import pandas as pd
import re

# 修正原列表中"CREW #707"后遗漏的逗号
active_crews = ["CREW #101", "CREW #102", "CREW #203", "CREW #301", "CREW #404", "CREW #501", "CREW #406", "CREW #304", "CREW #701", "CREW #702", "CREW #703", "CREW #704", "CREW #705", "CREW #706",
                "CREW #707", "CREW #708", "CREW #801", "CREW #802", "CREW #803", "CREW #805"]

# 构造兼容空格差异的正则匹配模式
# 对每个crew编号做转义处理,同时允许#和数字之间存在任意数量的空格
pattern = '|'.join([re.sub(r'(?<=#)\s*', r'\\s*', re.escape(crew)) for crew in active_crews])
# 增加捕获组用于提取匹配结果
pattern = f'({pattern})'

# 直接从目标列提取匹配内容,无匹配的单元格会返回NaN
df['Debris Crew WO#'] = df['Debris Crew WO#'].str.extract(pattern, expand=False)

# 可选:将提取结果统一为列表内的标准格式(去除#和数字之间的多余空格)
df['Debris Crew WO#'] = df['Debris Crew WO#'].str.replace(r'(?<=#)\s+', '', regex=True)

之前方案报错/无效的原因

  1. 第一个方案是拿长度为2216的Series和长度为19的列表直接做相等比较,维度不匹配必然报错。
  2. 硬编码截断字符串的方案无法适配不统一的文本格式,可靠性极低。
  3. 第三个方案报错是因为你用df[['Place Holder']](双括号)返回的是DataFrame对象,str访问器仅支持Series类型,换成单括号df['Place Holder']即可调用,但本质还是硬编码逻辑,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:00:04