You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sc.read_10x_mtx读取10x矩阵数据时遇TypeError错误求助

解决sc.read_10x_mtx读取时TypeError问题

这个错误的核心原因是:你的基因名(gene_symbols)中存在重复项,且部分重复的基因名是数值类型(float),当anndata.utils.make_index_unique自动给重复名添加后缀(如-1)时,会尝试将数值与字符串拼接,触发类型不匹配错误。

以下是具体解决步骤:

  • 第一步:排查基因名的类型和重复情况
    先不指定var_names='gene_symbols'读取数据,确认基因列的类型:

    adata = sc.read_10x_mtx('filtered_feature_bc_matrix_folder/', cache=True)
    # 查看gene_symbols列的前几行数据
    print(adata.var['gene_symbols'].head())
    # 检查该列的数据类型
    print(adata.var['gene_symbols'].apply(type).unique())
    
  • 第二步:统一基因名为字符串类型后手动去重
    先读取原始数据,将所有基因名转为字符串,再设置为var_names并去重:

    # 读取原始数据(用gene_ids作为默认索引)
    adata_raw = sc.read_10x_mtx('filtered_feature_bc_matrix_folder/', cache=True)
    # 将gene_symbols转为字符串,同时处理空值(如果存在)
    adata_raw.var['gene_symbols'] = adata_raw.var['gene_symbols'].astype(str).fillna('unknown_gene')
    # 设置索引为处理后的基因名
    adata_raw.var_names = adata_raw.var['gene_symbols']
    # 手动执行去重操作
    adata_raw.var_names_make_unique()
    
  • 第三步:验证处理结果
    确认索引无重复且类型正确:

    # 检查重复索引数量
    print(adata_raw.var_names.duplicated().sum())
    # 查看处理后的基因名
    print(adata_raw.var_names.head())
    

内容的提问来源于stack exchange,提问作者Sarah Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:19:57