如何匹配两个CSV文件的作者信息并导出符合条件的行?
用Pandas实现目标需求的具体方案
没问题,这事儿用Pandas就能轻松搞定,我给你一步步拆解并附上完整可运行的代码:
核心思路
我们需要先提取目标作者列表,再逐行检查第二个CSV的作者群里是否包含目标作者,最后导出符合条件的行。具体步骤如下:
- 导入Pandas库:这是Python处理CSV文件的标配工具
- 读取两个CSV文件:因为都是单列无表头的格式,我们可以自定义列名方便后续操作
- 构建快速查找的作者集合:把第一个CSV的作者转成集合,比用列表查找效率高得多
- 筛选符合条件的行:拆分第二个CSV每行的作者列表,检查是否和目标作者有交集
- 导出结果到新CSV:保持和原文件一致的单列格式
完整代码示例
import pandas as pd # 读取第一个单列作者CSV,自定义列名方便识别 df_target_authors = pd.read_csv('你的第一个文件名.csv', header=None, names=['author']) # 将目标作者转为集合,提升查找速度 target_authors_set = set(df_target_authors['author'].tolist()) # 读取第二个CSV,同样自定义列名 df_source = pd.read_csv('你的第二个文件名.csv', header=None, names=['authors_group']) # 定义筛选函数:检查当前行的作者群是否包含目标作者 def check_target_author(row): # 拆分竖线分隔的作者,同时去除可能存在的空格(比如有的行可能有`Aaron Harwood | Rajiv Ranjan`这类格式) authors_in_row = [auth.strip() for auth in row['authors_group'].split('|')] # 检查两个集合是否有交集,有则返回True return bool(set(authors_in_row) & target_authors_set) # 筛选出符合条件的行 filtered_result = df_source[df_source.apply(check_target_author, axis=1)] # 导出到新CSV,保持无表头、单列的格式 filtered_result.to_csv('筛选结果.csv', index=False, header=False)
关键细节说明
- 集合的优势:用
set存储目标作者,是因为集合的成员检查(in操作)比列表快几十倍,数据量大的时候这个优势会特别明显 - 去空格处理:
auth.strip()是为了兼容可能存在的格式不规范问题,如果你的数据里没有多余空格,可以去掉这一步 - 导出格式:
index=False和header=False确保导出的CSV和原文件格式完全一致(单列无表头),如果需要保留表头可以调整这两个参数
如果运行时遇到文件找不到的问题,记得把代码里的文件名改成你实际的文件路径哦~
内容的提问来源于stack exchange,提问作者sudeep shetty
相关产品推荐
相关产品推荐

