Pandas - 读取 MultiIndex 文件的特定列

Posted

技术标签:

【中文标题】Pandas - 读取 MultiIndex 文件的特定列【英文标题】:Pandas - read specific column of MultiIndex file 【发布时间】:2018-07-01 16:35:30 【问题描述】:

我有一个像这样的数据文件(两个标题行、索引列、制表符分隔):

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

是否有解决方法/适当的解决方案?当实际上只有一部分有用时,我想避免阅读整个文件。

【问题讨论】:

第一行表头和第二行表头是什么关系?我不确定您是否以最佳方式创建数据框...文件有多大? 第一行包含样本ID(三次相同,重复),第二行重复包含三个变量。文件大小为几 GB...有关简化的文件结构,请参阅已编辑的问题。 【参考方案1】:

试试这个:

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 中。

【讨论】:

好的,谢谢。我必须查看 pandas 文档 read_csv 的内存成本如何。我知道chunksize 参数,但我希望在读入时更聪明。 上述转换是否适用于您的数据?访问列和处理文件大小是(我认为)两个独立的问题。您可能能够从 CSV 读取到 HDFStore,尽管我还没有亲自这样做过。 它确实有效,再次感谢。我也在使用chunksize

以上是关于Pandas - 读取 MultiIndex 文件的特定列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将 CSV 中的 SingleIndex 合并到 MultiIndex

在 Pandas MultiIndex 中移动 DateTime 索引

将 CSV 加载到 Pandas MultiIndex DataFrame

pandas:将两个 DataFrame 与已排序的 MultiIndex 连接起来,使得结果具有已排序的 MultiIndex

Pandas:从 DataFrame 分配 MultiIndex 列

Pandas:修改特定级别的 Multiindex