如何遍历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
相关产品推荐
相关产品推荐

