Python如何仅使用列索引对数据帧进行子集化?

时间:2017-04-19 19:38:25

标签: python dataframe

我有一个包含282列和500K行的庞大数据帧。我希望使用列索引从数据框中删除列的列表。以下代码适用于顺序列。

df1 = df.ix[:,[0:2]] 

问题是我的列索引不是顺序的。

例如,我想从df中删除列0,1,2和5。我尝试了以下代码:

df1 = df.ix[:,[0:2,5]] 

我收到以下错误:

SyntaxError: invalid syntax

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

使用

选择 0,1,2,5 以外的列
df.ix[:, [3,4]+list(range(6,282))]

或者更有活力:

df.ix[:, [3,4]+list(range(6,df.shape[1]))]

答案 1 :(得分:0)

你有一个笨拙的阵容吗?尝试

df1 = df.ix[:, (0,1,2,5)]

df1 = df.ix[:, [0,1,2,5]]

data[:, [i for i in range(3)]+[5]]

答案 2 :(得分:0)

使用np.r_[...]沿第一轴连接切片

DF:

In [98]: df = pd.DataFrame(np.random.randint(10, size=(5, 12)))

In [99]: df
Out[99]:
   0   1   2   3   4   5   6   7   8   9   10  11
0   0   7   2   9   9   0   7   3   5   8   8   1
1   4   9   0   4   0   2   4   8   8   7   1   9
2   2   1   1   2   7   4   4   6   1   2   9   8
3   1   5   0   8   2   2   4   1   1   4   8   4
4   4   6   3   2   2   4   1   6   2   6   9   0

解决方案:

In [107]: df.iloc[:, np.r_[3:5, 6:df.shape[1]]]
Out[107]:
   3   4   6   7   8   9   10  11
0   9   9   7   3   5   8   8   1
1   4   0   4   8   8   7   1   9
2   2   7   4   6   1   2   9   8
3   8   2   4   1   1   4   8   4
4   2   2   1   6   2   6   9   0

In [108]: np.r_[3:5, 6:df.shape[1]]
Out[108]: array([ 3,  4,  6,  7,  8,  9, 10, 11])

In [110]: df.columns.difference([0,1,2,5])
Out[110]: Int64Index([3, 4, 6, 7, 8, 9, 10, 11], dtype='int64')

In [111]: df[df.columns.difference([0,1,2,5])]
Out[111]:
   3   4   6   7   8   9   10  11
0   9   9   7   3   5   8   8   1
1   4   0   4   8   8   7   1   9
2   2   7   4   6   1   2   9   8
3   8   2   4   1   1   4   8   4
4   2   2   1   6   2   6   9   0