如何对Pandas对象执行Slice(使用ix,loc,iloc)操作,排除某些指定索引

时间:2017-04-14 05:45:18

标签: python pandas dataframe

许多ixlociloc操作指定了您要选择的索引。我想做相反的事情。我想要排除的列数很少,剩下的就选择了。我该怎么做呢。即,指定需要排除的指数而不是包含的指数。

E.g。一些伪代码

a.iloc[~1:3, :]
a.loc[~['A', 'B'], :]

我正在寻找性能内存使用简洁,如上面的伪代码所示。

注意:DataFrames很大,只有一个轴的数据量很大,而其他数据的数据量相对较少。

3 个答案:

答案 0 :(得分:1)

你可以drop或者选择你想要的那些:

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']]

您还可以在索引上调用新的difference。所以除了col D和col E之外的所有东西:

 df2 = df[df.columns.difference(['D', 'E'])]

希望这有帮助!

答案 1 :(得分:1)

使用difference

假设您有切片UPDATE myDB.dbo.myTable SET myNumber=stuff(myNumber, 1,4, '12') WHERE myNumber LIKE '0000%' ,您希望获得不在该切片中的所有行。使用[1:3]difference

loc

如果我们知道行名称

,我们可以做同样的事情
idx = df.index.difference(df.index[1:3])
df.loc[idx]

旧答案

使用idx = df.index.difference(['A', 'B']) df.loc[idx] np.r_

创建切片
iloc

对于df.iloc[np.r_[0:1, 3:], :] ...使用loc

drop

答案 2 :(得分:1)

如果您知道要排除的列的索引,只需将从df.columns中提取的列数组切片为数据帧中所需的列。例如:

df[df.columns[2:5]]

如果你不知道索引,但是他们的名字,只需从列数组中删除它,再次从df.columns中提取。例如:

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