使用索引列表创建子集

时间:2017-11-03 10:16:19

标签: python-3.x pandas dataframe

所以我有一个数据框,我从中选择了某些值:

x=df[df['column'].str.contains('foo')].index

如果我想用原始df中的选定索引创建一个新的df: df2=df[x], 弹出以下消息:

KeyError: "Int64Index([ 48, 64, 98, 118, 120, 128, 138, 144, 151,\n 166,\n ...\n 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900,\n 15901],\n dtype='int64', length=4711) not in index"

这些索引位于数据框中,因为df.iloc[48]返回值

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

我相信你需要loc - 按索引值选择:

df = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (df)
   A  B  C  D  E  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

x=df.index[df['F'].str.contains('b')]
print (x)
Int64Index([3, 4, 5], dtype='int64')

df2=df.loc[x]
print (df2)
   A  B  C  D  E  F
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

样品:

df2=df[df['F'].str.contains('b')]
print (df2)

   A  B  C  D  E  F
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

Simplier仅供使用:

bisect