许多ix
,loc
,iloc
操作指定了您要选择的索引。我想做相反的事情。我想要排除的列数很少,剩下的就选择了。我该怎么做呢。即,指定需要排除的指数而不是包含的指数。
E.g。一些伪代码
a.iloc[~1:3, :]
a.loc[~['A', 'B'], :]
我正在寻找性能,内存使用和简洁,如上面的伪代码所示。
注意:DataFrames很大,只有一个轴的数据量很大,而其他数据的数据量相对较少。
答案 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)
假设您有切片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")]]