Python 如何对不包括某些指定索引的Pandas对象执行切片(使用ix、loc、iloc)操作

Python 如何对不包括某些指定索引的Pandas对象执行切片(使用ix、loc、iloc)操作,python,pandas,dataframe,Python,Pandas,Dataframe,许多ix,loc,iloc操作指定要选择的索引。我想做相反的事。我只想排除几列,然后选择其余的。我该怎么做呢。即,指定需要排除而不是包含的索引 例如,一些伪代码 a.iloc[~1:3, :] a.loc[~['A', 'B'], :] 我在寻找上述伪代码中的性能、内存使用和简洁性 注意:数据帧很大,一个轴上的数据量很大,其他轴上的数据量相对较少。您可以拖放或选择所需的数据: df.drop(df.columns[[1, 2]], axis=1, inplace=True) # drop b

许多
ix
loc
iloc
操作指定要选择的索引。我想做相反的事。我只想排除几列,然后选择其余的。我该怎么做呢。即,指定需要排除而不是包含的索引

例如,一些伪代码

a.iloc[~1:3, :]
a.loc[~['A', 'B'], :]
我在寻找上述伪代码中的性能内存使用简洁性


注意:数据帧很大,一个轴上的数据量很大,其他轴上的数据量相对较少。

您可以
拖放
或选择所需的数据:

df.drop(df.columns[[1, 2]], axis=1, inplace=True)

# drop by Name
df1 = df1.drop(['D', 'E'], axis=1)

## Select the ones you want
df1 = df[['a','d']]
还有一个新的你可以调用索引。所以除了D列和E列以外的所有东西:

 df2 = df[df.columns.difference(['D', 'E'])]
希望这有帮助

使用

假设您有一个切片
[1:3]
,您希望得到不在该切片中的所有行。使用
difference
loc

idx = df.index.difference(df.index[1:3])
df.loc[idx]
df.iloc[np.r_[0:1, 3:], :]
如果我们知道行名,我们也可以做同样的事情

idx = df.index.difference(['A', 'B'])
df.loc[idx]
旧答案

使用
np.r
iloc

idx = df.index.difference(df.index[1:3])
df.loc[idx]
df.iloc[np.r_[0:1, 3:], :]
对于
loc
。。。使用
drop

df.drop(['A', 'B'])

如果知道要排除的列的索引,只需对从df.columns中提取的列数组进行切片,以获得数据帧中所需的列。例如:

df[df.columns[2:5]]
如果您不知道索引,但知道它们的名称,只需将其从列数组中删除,再次从df.columns中提取。例如:

df[df.columns[(df.columns != "col_A") & (df.columns != "col_B")]]