Pandas中匹配DataFrame转录本合并数据及遍历列执行相同操作的方法
Pandas DataFrame匹配合并及批量列处理实现方案
1. 按转录本字段匹配合并两个DataFrame
你的需求是基于转录本ID的关联匹配,直接使用Pandas内置的merge方法即可实现,性能远高于手动匹配,适合大体量数据:
import pandas as pd import numpy as np # 核心合并逻辑,左连接保证df1的所有记录都被保留 merged_df = pd.merge( left = df1, # 以包含探针集的表为左表 right = df2, # 包含受试者数据的表为右表 left_on = 'Transcript', # 左表关联字段名 right_on = 'transcript_id', # 右表关联字段名 how = 'left' # 左连接,未匹配到的受试者数据会填充为NaN ).drop(columns = ['transcript_id']) # 删除重复的转录本ID列
执行后得到的merged_df就是你给出的预期输出结果。
2. 遍历列名执行统一处理操作
Pandas有两种常用的列批量处理方式,优先选择向量化操作提升大体量数据的处理效率:
方式1:显式遍历列名
# 遍历所有列名 for col in merged_df.columns: # 可先判断列类型,避免字符串列执行数值操作报错 if pd.api.types.is_numeric_dtype(merged_df[col]): # 此处替换为你需要的统一处理逻辑,示例为对数值列做标准化 merged_df[col] = (merged_df[col] - merged_df[col].mean()) / merged_df[col].std()
方式2:apply批量按列处理(更高效)
# 自定义列处理函数 def col_process(col): if pd.api.types.is_numeric_dtype(col): # 示例操作:数值列缺失值填充为0 return col.fillna(0) # 非数值列直接返回原值 return col # axis=0指定按列执行处理 merged_df = merged_df.apply(col_process, axis=0)
注意:处理大体量数据时,尽量避免嵌套循环逐行操作,优先使用Pandas内置的向量化函数,性能可提升几十到上百倍。
内容的提问来源于stack exchange,提问作者guitarman
相关产品推荐
相关产品推荐

