熊猫用列表拉出行

时间:2018-02-06 17:31:14

标签: python pandas

我有一个大约50,000行的数据框,我正在尝试根据列表提取行的子集。我已经确认我的列表c具有我想要提取的行的所有正确的id名称,并且所有这些ID都在我的原始数据帧中,但是当我使用loc将行提取到新的数据帧时,它只是拉动我在列表c中识别出大约一半的ID。 pandas中的loc函数在较小的测试中运行良好,但我无法弄清楚为什么它不适用于我的大型数据帧。可能是因为我的索引有数字和基于字符串的值吗?

为什么会发生这种情况的想法或loc函数的替代方法来做到这一点?

这是我的代码:

c = ['a','b','f','h','y']

df = pd.read_table('count_table.txt',comment="#",index_col='id')

df2 =df.loc[df.index.isin(c)]

有关添加的信息,我的实际数据框如下所示:

            T1   T2   T3
   A1       1     +   89 
   A2       2     +   12
   A3       3     +    0
   4        4     +   11
   5        5     -    7
   6        6     -    8
   7        7     +   56
   8        8     -   21
   MS1      1     +    1
   MS2      2     +    8
   NH5      5     +    0
   NH7      7     +   12
   .....

预期的输出将是一个新的数据帧,只有列表c中包含索引的行。

所以我要说上面的数据框和一个列表c=['MS1','NH5','8','4','5']我想要一个看起来像这样的数据框:

            T1   T2   T3
   4        4     +   11
   5        5     -    7
   8        8     -   21
   MS1      1     +    1
   NH5      5     +    0

我得到的是这样的,它在列表c中清楚地遗漏了一些值:

            T1   T2   T3
   4        4     +   11
   8        8     -   21
   NH5      5     +    0

1 个答案:

答案 0 :(得分:0)

我认为您可以使用isin获取掩码:

c=['MS1','NH5',8,4,5]
subset_df=df[df.index.isin(c)]

注意845输入索引。