每个人
columns = ['a', 'c', 'e', 'f', 'g']
df2 = df.loc[:,~df.columns.isin(columns)]
我想知道是否有更像:
df2 = df.loc[:,'a': 'g']
但不包括"b"列.
第二种方法我做了两个命令,一个从a-g中 Select ,另一个从b中删除.
我想知道我是否可以从a-g中 Select ,同时删除b
每个人
columns = ['a', 'c', 'e', 'f', 'g']
df2 = df.loc[:,~df.columns.isin(columns)]
我想知道是否有更像:
df2 = df.loc[:,'a': 'g']
但不包括"b"列.
第二种方法我做了两个命令,一个从a-g中 Select ,另一个从b中删除.
我想知道我是否可以从a-g中 Select ,同时删除b
The easiest way will be to use slice notation .loc
as you demonstrated along with a call to .drop
to remove any specific unwanted columns:
>>> df = pd.DataFrame([[*range(10)]]*5, columns=[*'abcdefghij'])
>>> df
a b c d e f g h i j
0 0 1 2 3 4 5 6 7 8 9
1 0 1 2 3 4 5 6 7 8 9
2 0 1 2 3 4 5 6 7 8 9
3 0 1 2 3 4 5 6 7 8 9
4 0 1 2 3 4 5 6 7 8 9
.loc
and dropping相当简单,用.loc
来执行切片,然后用drop
来执行任何你不想要的东西.
>>> df.loc[:, 'a':'g'].drop(columns='b')
a c d e f g
0 0 2 3 4 5 6
1 0 2 3 4 5 6
2 0 2 3 4 5 6
3 0 2 3 4 5 6
4 0 2 3 4 5 6
如果您希望尽可能高效地使用索引,可以使用Index.slice_indexer
和.drop
,这样您就不会创建数据的临时子集(就像我们上面所做的那样):
>>> columns = df.columns[df.columns.slice_indexer('a', 'g')].drop('b')
>>> df[columns]
a c d e f g
0 0 2 3 4 5 6
1 0 2 3 4 5 6
2 0 2 3 4 5 6
3 0 2 3 4 5 6
4 0 2 3 4 5 6