我来自R世界,df[,-c(1,7)]
函数可以很好地从数据框中选择除了非连续列数(在本例中为除了第1列和第7列之外的所有内容)之外的所有内容。< / p>
我试图在熊猫中做同样的事情。
这是一个虚拟数据帧:
df1 = pd.DataFrame({'a':range(10), 'b':range(10,20), 'c':list('abcdefghij'), 'g':[1]*3 + [2]*3 + [3]*4, 'f':[1]*3 + [2]*3 + [3]*4, 'j':[1]*3 + [2]*3 + [3]*4})
df1
a b c f g j
0 0 10 a 1 1 1
1 1 11 b 1 1 1
2 2 12 c 1 1 1
3 3 13 d 2 2 2
4 4 14 e 2 2 2
5 5 15 f 2 2 2
6 6 16 g 3 3 3
7 7 17 h 3 3 3
8 8 18 i 3 3 3
9 9 19 j 3 3 3
我知道我可以执行以下操作,选择我想要的列(而不是省略我不想要的内容):
df1[list(df1.columns[0:2]) + list(df1.columns[4:6])]
a b g j
0 0 10 1 1
1 1 11 1 1
2 2 12 1 1
3 3 13 2 2
4 4 14 2 2
5 5 15 2 2
6 6 16 3 3
7 7 17 3 3
8 8 18 3 3
9 9 19 3 3
但有没有办法告诉Pandas除了第2列和第3列以外我想要的一切?并且,我们可以扩展这个说我想要除第2列和第4列之外的所有内容吗?除了0:2和4之外的一切?
答案 0 :(得分:2)
In [9]: df1.iloc[:,~pd.Int64Index(np.arange(len(df1.columns))).isin([2,4])]
Out[9]:
a b f j
0 0 10 1 1
1 1 11 1 1
2 2 12 1 1
3 3 13 2 2
4 4 14 2 2
5 5 15 2 2
6 6 16 3 3
7 7 17 3 3
8 8 18 3 3
9 9 19 3 3
[10 rows x 4 columns]
用这个可以更清洁:
In [10]: ic = lambda x: pd.Int64Index(np.arange(x))
In [11]: df1.iloc[:,~ic(len(df1.columns)).isin([2,4])]
Out[11]:
a b f j
0 0 10 1 1
1 1 11 1 1
2 2 12 1 1
3 3 13 2 2
4 4 14 2 2
5 5 15 2 2
6 6 16 3 3
7 7 17 3 3
8 8 18 3 3
9 9 19 3 3
[10 rows x 4 columns]
答案 1 :(得分:0)
一种方法是使用np.r_
numpy
import numpy as np
df2 = df[np.r_[0, 2, 4:]]
另一种方法是做类似的事情:
df2 = df[np.delete(np.arange(len(df.columns)), (2, 7))]