使用Pandas匹配TXT名单 为Excel对应参与者标记参与状态
核心逻辑实现代码及说明
完整可运行代码
import pandas as pd # 读取Excel全量参与者数据 excelList = pd.read_excel("participantsList.xlsx", sheet_name="Table1") # 读取txt已参与名单,处理为无首尾空白、无空行的集合 with open('participated.txt','r', encoding='utf-8') as f: participated_set = {line.strip() for line in f if line.strip()} # 拼接Excel中的名和姓为完整姓名,匹配已参与名单后赋值Participated列为yes excelList['full_name'] = excelList['First name'] + ' ' + excelList['Last Name'] excelList.loc[excelList['full_name'].isin(participated_set), 'Participated'] = 'yes' # 可选:删除临时生成的全名列再导出 excelList = excelList.drop(columns=['full_name']) # 导出结果文件 excelList.to_excel(r'newList.xlsx', index=False)
关键逻辑说明
- 用
with语句读取txt文件,会自动关闭文件句柄,避免资源泄漏 - 把已参与名单转成
set类型,查询匹配的时间复杂度为O(1),数据量很大时也能保持高效 - 用pandas的
isin方法批量匹配名单,避免手动循环遍历行,代码更简洁执行效率更高 - 导出时加
index=False参数,避免把pandas默认的行索引写入Excel文件
适配不同匹配规则的调整方案
如果txt中存储的仅为参与者的姓氏(和示例中Last Name列完全对应),可以把匹配逻辑修改为:
# 直接匹配Last Name列,无需生成full_name临时列 excelList.loc[excelList['Last Name'].isin(participated_set), 'Participated'] = 'yes'
内容的提问来源于stack exchange,提问作者user10657156
相关产品推荐
相关产品推荐

