Pandas基于Terms列含Error条件提取Terms Name列的唯一值列表
报错根源
你当前代码抛出的ValueError来自末尾使用的.item()方法限制:
- 该方法仅能对长度为1的pandas Series生效,作用是把单元素序列转为原生Python标量;一旦"Terms"列匹配到2个及以上的"Error"行,返回的Series长度大于1,就会因为无法强制转为单个值触发报错。
多匹配场景的实现方案
完全保留你原有的不区分大小写匹配、跳过空值的筛选逻辑,只需要把末尾不适用多值场景的.item()替换为去重逻辑,即可实现返回所有匹配行的"Terms Name"唯一值的需求:
import pandas as pd import re df = pd.read_excel('Test.xlsx') # 筛选匹配行,取对应Terms Name列后去重 unique_matched_values = df.loc[ df['Terms'].str.contains('Error', flags=re.IGNORECASE, na=False), 'Terms Name' ].unique() print(unique_matched_values)
该实现没有长度限制,无论匹配到1个还是N个"Error"行,都不会触发之前的报错,会正常输出类似['20th NM' 'NET 45']的预期结果。
可选调整逻辑
- 若需要把结果转为可直接操作的原生Python列表,可在链式调用最后追加
.tolist(),输出格式为['20th NM', 'NET 45'] - 若需要统计每个唯一值对应的"Error"出现次数,可把
.unique()替换为.value_counts(),直接返回每个"Terms Name"对应的匹配行数 - 若需求不要求去重、仅需逐行取出所有匹配到的"Terms Name"值,去掉
.unique()直接返回筛选后的Series即可
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

