【问题标题】:How to get data from dataframe with pandas如何使用熊猫从数据框中获取数据
【发布时间】:2017-11-01 16:11:27
【问题描述】:

这是我拥有的染色体数据(3.2GB)。对于每 2 行,我采用第 3 列的特定 id(# 之后的部分是不必要的)。我将这些 ID 写在一个文本文件中。现在它的大小是 1.2 GB。我需要从该 Ids.txt 文件中获取一个 id,并从染色体文件中找到两对并获取它们的第 0 列和第 1 列及其 id。例如:假设我这样做是为了

ID = HWI-ST1113_0139:6:1309:6672:91333。

结果必须是

HWI-ST1113_0139:6:1309:6672 chr1 807003 chr1 805329

我无法为此创建适当的算法,而且我是 pandas 和 numpy 的新手。 如果你能帮助我会appriciate那些家伙。谢谢你。

    0 .    1 .     2 .      3 .                                     
    chr1   42559   42609    HWI-ST216_0359:4:1106:4167:41680#AT.AAG/1  26  -
    chr1   96644   96694    HWI-ST1113_0139:5:2205:21258:88747#..GGT./1  25  -
    chr1  228403  228452    HWI-ST1113_0139:5:1115:14469:39910#....../1  19  +
    chr1  532565  532615    HWI-ST216_0359:4:1313:3216:51668#C.G.C./1  23  -
    chr1  557412  557462    HWI-ST1113_0139:5:1205:9402:77620#..G.../1  30  -
    chr1  807003  807051    HWI-ST1113_0139:6:1309:6672:91333#.G...A/1  42  -
    chr1  805329  805379    HWI-ST1113_0139:6:1309:6672:91333#.G...A/2  26  +

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    使用boolean indexing 进行过滤:

    ID = 'HWI-ST1113_0139:6:1309:6672:91333'
    mask = df[3].str.startswith(ID)
    
    df1 = df.loc[mask, [0, 1, 3]]
    print (df1)
          0       1                                         3
    5  chr1  807003   HWI-ST1113_0139:6:1309:6672:91333#.G...
    6  chr1  805329  HWI-ST1113_0139:6:1309:6672:91333#.G...A
    
    #split by `#` and then remove last 6 chars
    df1[3] = df1[3].str.split('#').str[0].str.rsplit(':', 1).str[0]
    print (df1)
          0       1                            3
    5  chr1  807003  HWI-ST1113_0139:6:1309:6672
    6  chr1  805329  HWI-ST1113_0139:6:1309:6672
    

    如果还想将输出整形为一行,请使用unstack:

    df1 = (df1.set_index([3, np.arange(len(df1.index))])
              .unstack()
              .sort_index(axis=1, level=1)
              .reset_index())
    df1.columns = range(df1.shape[1])
    print (df1)
                                 0     1       2     3       4
    0  HWI-ST1113_0139:6:1309:6672  chr1  807003  chr1  805329
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2021-08-31
      • 1970-01-01
      • 2021-03-20
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2021-01-19
      相关资源
      最近更新 更多