通过排除索引号选择熊猫行

不知道为什么我想不出来。我希望通过使用索引数字切片熊猫数据框架。我有一个列表/核心索引与索引号,我不需要,如下所示

 pandas.core.index.Int64Index


Int64Index([2340, 4840, 3163, 1597, 491 , 5010, 911 , 3085, 5486, 5475, 1417, 2663, 4204, 156 , 5058, 1990, 3200, 1218, 3280, 793 , 824 , 3625, 1726, 1971, 2845, 4668, 2973, 3039, 376 , 4394, 3749, 1610, 3892, 2527, 324 , 5245, 696 , 1239, 4601, 3219, 5138, 4832, 4762, 1256, 4437, 2475, 3732, 4063, 1193], dtype=int64)

我如何创建一个新的数据框排除这些索引号。我尝试

df.iloc[combined_index]

很明显,这只是显示了那些索引号的行(与我想要的相反)。如有任何帮助,我将不胜感激

106648 次浏览

您可以使用 pd.Int64Index(np.arange(len(df))).difference(index)来形成一个新的序号索引。例如,如果我们想删除与序数索引[1,3,5]相关联的行,那么

import numpy as np
import pandas as pd


index = pd.Int64Index([1,3,5], dtype=np.int64)
df = pd.DataFrame(np.arange(6*2).reshape((6,2)), index=list('ABCDEF'))
#     0   1
# A   0   1
# B   2   3
# C   4   5
# D   6   7
# E   8   9
# F  10  11


new_index = pd.Int64Index(np.arange(len(df))).difference(index)
print(df.iloc[new_index])

产量

   0  1
A  0  1
C  4  5
E  8  9

不知道这是不是你想要的答案,把它作为一个答案贴出来,因为它太长了,无法评论:

In [31]: d = {'a':[1,2,3,4,5,6], 'b':[1,2,3,4,5,6]}


In [32]: df = pd.DataFrame(d)


In [33]: bad_df = df.index.isin([3,5])


In [34]: df[~bad_df]
Out[34]:
a  b
0  1  1
1  2  2
2  3  3
4  5  5

也许更简单的方法是使用一个布尔索引,像下面这样切片:

df[~df.index.isin(list_to_exclude)]

只需使用 .drop并将索引列表传递给它来排除。

import pandas as pd


df = pd.DataFrame({"a": [10, 11, 12, 13, 14, 15]})




df.drop([1, 2, 3], axis=0)

输出这个。

    a
0  10
4  14
5  15

假设存在 DataFrame df:

In [4]: df = pd.DataFrame({'a': range(4), 'b': ['a', 'b', 'c', 'd']})


In [5]: df
Out[5]:
a  b
0  0  a
1  1  b
2  2  c
3  3  d

如果要删除 index [1,3] ,可以使用 query:

In [5]: df.query('index != [1,3]')
Out[5]:
a  b
0  0  a
2  2  c