我有一个包含282列和500K行的庞大数据帧。我希望使用列索引从数据框中删除列的列表。以下代码适用于顺序列。
df1 = df.ix[:,[0:2]]
问题是我的列索引不是顺序的。
例如,我想从df中删除列0,1,2和5。我尝试了以下代码:
df1 = df.ix[:,[0:2,5]]
我收到以下错误:
SyntaxError: invalid syntax
有什么建议吗?
答案 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