代码之家  ›  专栏  ›  技术社区  ›  pylipp

Pandas-读取多索引文件的特定列

  •  3
  • pylipp  · 技术社区  · 6 年前

    我有一个数据文件(两个标题行、索引列、制表符分隔),如下所示:

    Hybridization REF   TCGA-2V-A95S-01A-11R-A37G-13    TCGA-2V-A95S-01A-11R-A37G-13    TCGA-2V-A95S-01A-11R-A37G-13    TCGA-2Y-A9GS-01A-12R-A38M-13    TCGA-2Y-A9GS-01A-12R-A38M-13    TCGA-2Y-A9GS-01A-12R-A38M-13    TCGA-2Y-A9GT-01A-11R-A38M-13    TCGA-2Y-A9GT-01A-11R-A38M-13    TCGA-2Y-A9GT-01A-11R-A38M-13
    miRNA_ID    read_count  reads_per_million_miRNA_mapped  cross-mapped    read_count  reads_per_million_miRNA_mapped  cross-mapped    read_count  reads_per_million_miRNA_mapped  cross-mapped
    hsa-let-7a-1    17377   4045.749542 N   47187   7077.368096 N   31765   8956.551210 N
    hsa-let-7a-2    34913   8128.517796 N   94766   14213.530526    Y   64148   18087.355487    N
    hsa-let-7a-3    17496   4073.455371 N   47683   7151.760928 N   31782   8961.344580 N
    hsa-let-7b  33546   7810.249993 N   46089   6912.683963 N   64948   18312.925799    N
    hsa-let-7c  1349    314.077006  N   12185   1827.573913 Y   14075   3968.627681 N
    hsa-let-7d  1735    403.946335  N   1763    264.424523  N   1176    331.588359  N
    

    或简化:

    Sample A A A B B B C C C D ...
    Gene   x y z x y z x y z x ...
    gene1
    gene2    [data matrix]
    ...
    

    我想读一下 read_count 数据框中的列。使用 df = pd.read_csv("file.csv", sep='\t', header=[0, 1], index_col=0, usecols=["read_count"]) 引发 ValueError: cannot specify usecols when specifying a multi-index header .

    是否有变通方法/适当的解决方案?我希望避免读取整个文件,因为实际上只有部分文件是有用的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Evan    6 年前

    尝试以下操作:

    import pandas as pd
    df = pd.read_csv("file.csv", sep='\t', header=[0, 1], index_col=0)
    df2 = df.xs('read_count', axis = 1, level = 1)
    

    从此处复制: pandas multiindex - how to select second level when using columns?

    我还尝试使用 pd.melt ,但没有得到好的解决方案。

    请注意,如果文件占机器内存的很大一部分,则读入该文件可能会导致问题。您可以尝试设置 chunksize 如果性能是一个问题。我相信,但不确定熊猫在 read_csv 即使只有文件的一部分存储在 df .