2017-04-04 32 views
3

這是一個簡單的問題,但我找不到任何直接的解決方案。 pandasiloc可以分片數據幀兩種情況,如df.iloc[:,2:5]df.iloc[:,[6,10]]。 如果我想選擇2:5, 6 and 10列,如何使用iloc來切片df如何切割大熊貓數量不確定指數?

回答

3

使用numpy.r_

從文檔:

平移切片對象沿第一軸串聯。

這是一種快速構建陣列的簡單方法。有兩種使用 的情況。

如果索引表達式包含逗號分隔的數組,則將它們沿着它們的第一個軸堆疊起來。

如果索引表達式包含切片 表示法或標量,則創建一個1-D數組,其範圍爲 切片記號。

演示:

In [16]: df = pd.DataFrame(np.random.rand(3, 12)) 

In [17]: df.iloc[:, np.r_[2:5, 6, 10]] 
Out[17]: 
     2   3   4   6   10 
0 0.760201 0.378125 0.707002 0.310077 0.375646 
1 0.770165 0.269465 0.419979 0.218768 0.832087 
2 0.253142 0.737015 0.652522 0.474779 0.094145 

In [18]: df 
Out[18]: 
     0   1   2   3   4   5   6   7   8   9   10  11 
0 0.668062 0.581268 0.760201 0.378125 0.707002 0.249094 0.310077 0.336708 0.847258 0.705631 0.375646 0.830852 
1 0.521096 0.798405 0.770165 0.269465 0.419979 0.455890 0.218768 0.833776 0.862483 0.817974 0.832087 0.958174 
2 0.211815 0.747482 0.253142 0.737015 0.652522 0.274231 0.474779 0.256119 0.110760 0.224096 0.094145 0.525201 

UPDATE:從熊貓0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers開始。

所以,我更新了我的答案,以解決這個問題過時feauture:改變.ix[] - >df.iloc[...]

+0

太快了! THx你們倆! – Cobin

+1

很高興我們可以幫助您!祝你好運! – jezrael

1

我認爲你需要numpy.r_爲concanecate指數,然後iloc通過位置選擇:

ds = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3], 
        'G':[1,3,5], 
        'H':[5,3,6], 
        'I':[4,4,3], 
        'J':[6,4,3], 
        'K':[9,4,3]}) 

print (ds) 
    A B C D E F G H I J K 
0 1 4 7 1 5 7 1 5 4 6 9 
1 2 5 8 3 3 4 3 3 4 4 4 
2 3 6 9 5 6 3 5 6 3 3 3 

print (np.r_[2:5, 6,10]) 
[ 2 3 4 6 10] 

print (ds.iloc[:, np.r_[2:5, 6,10]]) 
    C D E G K 
0 7 1 5 1 9 
1 8 3 3 3 4 
2 9 5 6 5 3 

討論:

ix vs iloc - 主要問題是ixwill be deprecated in Pandas 0.20.0。而it seems即將推出新版本 - 在四月份,更好用的是iloc