Pandas DataFrame中行和列的元数据

时间:2015-04-17 00:39:21

标签: python pandas

我有一个大的遗传数据矩阵,SNP的个体,值为0,1,2。个体和SNP都有一些相关的元数据。例如,

  

个人可能有性别,血统,年龄,医生等   SNP具有染色体,位置,突变类型等。

元数据不是分层的。我想把它组织成一个DataFrame所以我可以

  1. 轻松过滤元数据值(例如18至65岁)
  2. 仍然通过整数指数自然地参考遗传数据(例如df.iloc [0,0]或df.values [0,0]是第一个SNP的第一个个体的基因型。)
  3. 熊猫可以吗?

    组织数据的自然方式是什么?

1 个答案:

答案 0 :(得分:0)

我不确定您的专业水平是基于这个问题,但我首先要查看大熊猫merge上的docs

听起来你有个人作为行和SNP作为列;我还假设您拥有由每个人的唯一标识符索引的两个数据帧。如果您的第二个数据框的临床数据具有相同的索引,您可以使用以下行合并它们:

import pandas as pd
pd.merge(snp_df, clinical_df, how='inner', left_index=True, right_index=True)

这只会给你完整的数据;如果您想要包含没有临床数据的个体,请将参数更改为how=left,这将使每个人都拥有遗传数据。

要根据有关SNP的一些信息进行过滤,我可以这样做:

snp_info_dict = {...}  # Some information you already have, indexed by SNP
def test_function(single_snp_info):
    # Test something about the information, return True or False
good_snps = [snp for snp in snp_info_dict if test_function(snp_info_dict[snp])]
good_snps_df = df.loc[:, good_snps]

您也可以使用pandas数据帧上的操作来执行上述操作。