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

如何遍历Excel某列每行并查询对应字符串是否存在于第二个表格的指定列中

代码运行异常原因

  • in 对pandas Series的判断逻辑不符合预期:name1 in df4 判断的是name1是否为df4的索引值,而非是否存在于df4的数值中,判断值是否存在需改为name1 in df4.values
  • 缩进逻辑错误:当前else和for平级,属于Python的for...else语法,只有整个for循环没有触发break时才会执行一次,无法实现每个不匹配元素都打印no的需求
  • 未处理空值:如果字符串分割后不存在第二个元素,会返回NaN值,后续判断会出现逻辑异常,建议提前过滤空值

修正后的循环写法

import pandas as pd

df1 = pd.read_excel('Manual reports.xlsx')
df3 = pd.read_csv('Audit.csv')

# 提取目标列并过滤空值
df4 = df3['File'].str.split(';').str[1].dropna()
destination_vals = df1['Destination Path'].str.split('m').str[1].dropna()

# 逐行判断
for name1 in destination_vals:
    if name1 in df4.values:
        print(name1, "yes")
    else:
        print(name1, "no")

更高效的向量化写法(推荐,适合数据量较大的场景)

使用pandas内置isin方法批量判断,性能远高于手动循环,转集合后匹配效率更高:

import pandas as pd

df1 = pd.read_excel('Manual reports.xlsx')
df3 = pd.read_csv('Audit.csv')

# 转集合降低匹配时间复杂度
target_set = set(df3['File'].str.split(';').str[1].dropna())
# 批量生成匹配结果
df1['match_res'] = df1['Destination Path'].str.split('m').str[1].isin(target_set).map({True:'yes', False:'no'})

# 输出结果
for name, res in zip(df1['Destination Path'].str.split('m').str[1], df1['match_res']):
    if pd.notna(name):
        print(name, res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 05:24:02