2016-09-08 162 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