我有一個巨大的數據框,282列和500K行。我希望使用列索引從數據框中刪除列的列表。以下代碼適用於順序列。Python如何用列索引對數據框進行子集化?
df1 = df.ix[:,[0:2]]
問題是我的列索引不是順序的。
例如,我想從df中刪除列0,1,2和5。我嘗試下面的代碼:
df1 = df.ix[:,[0:2,5]]
我收到以下錯誤:
SyntaxError: invalid syntax
有什麼建議?
我有一個巨大的數據框,282列和500K行。我希望使用列索引從數據框中刪除列的列表。以下代碼適用於順序列。Python如何用列索引對數據框進行子集化?
df1 = df.ix[:,[0:2]]
問題是我的列索引不是順序的。
例如,我想從df中刪除列0,1,2和5。我嘗試下面的代碼:
df1 = df.ix[:,[0:2,5]]
我收到以下錯誤:
SyntaxError: invalid syntax
有什麼建議?
選擇列比0,1,2,5與其他:
df.ix[:, [3,4]+list(range(6,282))]
還是多了幾分活力:
df.ix[:, [3,4]+list(range(6,df.shape[1]))]
它是一個numpy的數組你有?嘗試
df1 = df.ix[:, (0,1,2,5)]
或
df1 = df.ix[:, [0,1,2,5]]
或
data[:, [i for i in range(3)]+[5]]
使用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
工作就像一個魅力。謝謝! –
很酷。很高興它有幫助! – Psidom