2016-09-08 155 views
6

什麼是通過更多索引範圍切片數據幀的pythonic方式(例如,通過10:1225:28)? 我想這更優雅的方式:Python熊貓通過多個索引範圍切片數據幀

df = pd.DataFrame({'a':range(10,100)}) 
df.iloc[[i for i in range(10,12)] + [i for i in range(25,28)]] 

結果:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 

像這樣的事情會更優雅:

df.iloc[(10:12, 25:28)] 

謝謝!

回答

17

您可以使用numpy的的r_ 「切片絕招」:

df = pd.DataFrame({'a':range(10,100)}) 
df.iloc[pd.np.r_[10:12, 25:28]] 

給出:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 
+0

它沒有比這更簡潔。 'np.r_'就是爲了這個目的而建造的。而且,我學到了一些東西。希望我能+2。 – piRSquared

+1

需要注意的一點是:要獲得負向索引(即相當於'df.iloc [-2:]'),必須包含一個零:'df.iloc [pd.np.r _ [:2,-2: 0]]' –

0

你可以把大熊貓ISIN功能的優勢。

df = pd.DataFrame({'a':range(10,100)}) 
ls = [i for i in range(10,12)] + [i for i in range(25,28)] 
df[df.index.isin(ls)] 


    a 
10 20 
11 21 
25 35 
26 36 
27 37