我有一个大约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
答案 0 :(得分:0)
我认为您可以使用isin
获取掩码:
c=['MS1','NH5',8,4,5]
subset_df=df[df.index.isin(c)]
注意8
,4
,5
输入索引。