使用pd.append批量应用自定义join_ppi函数失败,求技术帮助
解决方法
首先明确:pd.append是用来合并DataFrame/Series的工具,根本不适合批量处理每行生成新值的场景,你用错方法了。下面给两种正确的实现方式:
方法一:修改函数后用apply处理每行
重写你的函数,让它直接接收每行的Series对象(而非行号),再用df.apply(axis=1)批量应用:
def join_ppi(row): if row["taxidA"] == '9606': return f"{row['prot1']}:{row['prot2']}" else: return f"{row['prot2']}:{row['prot1']}" # 生成新列存储拼接结果 DF['ppi_joined'] = DF.apply(join_ppi, axis=1)
这样apply会自动遍历DF的每一行,把每行数据传给join_ppi函数,无需手动用行号索引全局DF,逻辑更清晰也更安全。
方法二:矢量化操作(推荐,效率更高)
如果你的数据集较大,推荐用numpy.where实现矢量化条件判断,避免逐行循环的开销:
import numpy as np DF['ppi_joined'] = np.where( DF['taxidA'] == '9606', DF['prot1'] + ':' + DF['prot2'], DF['prot2'] + ':' + DF['prot1'] )
这种方式是pandas官方推荐的高效处理方式,底层用C实现运算,比apply快数倍甚至数十倍。
内容的提问来源于stack exchange,提问作者Aravind Suresh
相关产品推荐
相关产品推荐

