Pandas - 读取MultiIndex文件的特定列

时间:2018-01-22 23:26:10

标签: python pandas multi-index

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

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列的内容读入DataFrame。使用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 个答案:

答案 0 :(得分:0)

试试这个:

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时,pandas会将整个文件读入内存,即使只有一部分文件存储在df中。