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