如何将scRNA-seq的pandas DataFrame转换为二进制DataFrame?
将scRNA-seq表达矩阵转换为二进制矩阵的方法
你用pd.get_dummies(df)没效果是因为这个函数的用途不对——它是用来给分类变量做独热编码的,比如把带有类别标签的列拆成多个二进制列,完全不适合处理数值型的表达矩阵二值化。下面是几种可行的转换方法:
方法1:用Pandas内置方法直接处理
利用ne()(判断是否不等于0)结合astype(int)把布尔值转成0/1,代码简洁高效:
binary_df = df.ne(0).astype(int)
方法2:用NumPy的条件判断
如果需要更直观的条件逻辑,可以用np.where:
import numpy as np binary_df = pd.DataFrame( np.where(df != 0, 1, 0), index=df.index, columns=df.columns )
方法3:直接在AnnData层面处理(更适合大矩阵)
因为你的数据来自AnnData,而AnnData的X可能是稀疏矩阵(scRNA-seq数据常用存储格式),直接在AnnData上处理会更高效:
# 直接转换AnnData的表达矩阵 adata1.X = (adata1.X != 0).astype(int) # 再转成DataFrame binary_df = adata1.to_df()
验证结果
你可以取前几行数据验证转换是否正确:
print(binary_df.head())
内容的提问来源于stack exchange,提问作者Irin Sultana
相关产品推荐
相关产品推荐

