2017-04-19 56 views
1

我有一個巨大的數據框,282列和500K行。我希望使用列索引從數據框中刪除列的列表。以下代碼適用於順序列。Python如何用列索引對數據框進行子集化?

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

問題是我的列索引不是順序的。

例如,我想從df中刪除列0,1,2和5。我嘗試下面的代碼:

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

我收到以下錯誤:

SyntaxError: invalid syntax 

有什麼建議?

回答

2

選擇列比0,1,2,5與其他:

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

還是多了幾分活力:

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

工作就像一個魅力。謝謝! –

+0

很酷。很高興它有幫助! – Psidom

0

它是一個numpy的數組你有?嘗試

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

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

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

使用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 
相關問題