如何基于PMID匹配将CSV列数据追加到已有记事本数据集对应条目?
匹配追加PMID对应Citation字段的实现方法
你之前用pandas直接merge的方案不合适,是因为原始数据集不是结构化的CSV格式,而是逐行存储的类MEDLINE文本格式,需要先解析文本结构再做插入操作,具体实现步骤和代码如下:
核心实现思路
- 先读取CSV文件,构建
PMID:Citation的映射字典,匹配效率更高 - 逐行读取原始文本数据集,识别到PMID行时提取PMID值,到映射字典中查找对应的Citation内容
- 匹配成功后将Citation行按要求的格式插入到PMID行下方,最后输出新的文件
单文件处理代码
import pandas as pd # 1. 构建PMID到Citation的映射字典 csv_df = pd.read_csv('mycsvfile.csv') # 需根据CSV实际的列名调整,此处假设PMID列名为PMID,Citation列名为Citation pmid_citation_map = dict(zip(csv_df['PMID'].astype(str), csv_df['Citation'])) # 2. 逐行处理原始文本数据集 output_lines = [] with open('原始文本数据集路径.txt', 'r', encoding='utf-8') as f: for line in f: # 先保留原始行 output_lines.append(line.rstrip('\n')) # 识别PMID行 if line.startswith('PMID- '): # 提取PMID值 pmid = line.strip().split('- ', 1)[1].strip() # 匹配成功则插入Citation行 if pmid in pmid_citation_map: # 可根据需求调整Citation行的缩进、格式 citation_line = f' Citation - {pmid_citation_map[pmid]} "I want to append this data with matching PMID"' output_lines.append(citation_line) # 3. 输出合并后的结果 with open('合并后数据集.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(output_lines))
多数据集批量处理代码
如果需要处理多个包含PMID字段的文本数据集,可以把处理逻辑封装为函数,批量调用即可:
import pandas as pd def build_pmid_map(csv_path): """构建PMID到Citation的映射字典""" csv_df = pd.read_csv(csv_path) return dict(zip(csv_df['PMID'].astype(str), csv_df['Citation'])) def process_single_file(input_path, output_path, pmid_map): """处理单个文本数据集""" output_lines = [] with open(input_path, 'r', encoding='utf-8') as f: for line in f: output_lines.append(line.rstrip('\n')) if line.startswith('PMID- '): pmid = line.strip().split('- ', 1)[1].strip() if pmid in pmid_map: citation_line = f' Citation - {pmid_map[pmid]} "I want to append this data with matching PMID"' output_lines.append(citation_line) with open(output_path, 'w', encoding='utf-8') as f: f.write('\n'.join(output_lines)) # 批量调用示例 if __name__ == '__main__': # 构建映射字典 pmid_map = build_pmid_map('mycsvfile.csv') # 配置需要处理的文件路径对:(原始文件路径, 输出文件路径) file_pairs = [ ('数据集1.txt', '输出_数据集1.txt'), ('数据集2.txt', '输出_数据集2.txt'), ('数据集3.txt', '输出_数据集3.txt') ] # 批量处理 for input_p, output_p in file_pairs: process_single_file(input_p, output_p, pmid_map)
注意事项
- 代码中将CSV中的PMID统一转为字符串格式,避免数值型和字符串型PMID匹配失败的问题
- Citation行的缩进、分隔符、后缀内容都可以根据实际需求调整
citation_line的生成规则 - 如果原始PMID行本身带缩进,调整
startswith的匹配规则即可
内容的提问来源于stack exchange,提问作者Mastane Lael
相关产品推荐
相关产品推荐

