2016-09-08 16 views
6

Was ist der Python-Weg, um einen Datenrahmen um mehr Indexbereiche zu schneiden (z. B. durch 10:12 und 25:28)? Ich möchte dies in einem eleganteren Weg:Python pandas Schnitt Datenfeld durch mehrere Indexbereiche

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

Ergebnis:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 

So etwas wäre eleganter:

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

Thank you!

Antwort

17

Sie numpy des r_ "Slicing Trick" verwenden können:

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

Gibt:

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

Es wird nicht viel prägnanter als dies erhalten. 'np.r_' wurde für genau diesen Zweck gebaut. Und ich habe etwas gelernt. Ich wünschte, ich könnte +2. – piRSquared

+1

eine Sache zu beachten: Um negative Indizierung (dh das Äquivalent von 'df.iloc [-2:]') zu bekommen, müssen Sie eine Null einschließen: 'df.iloc [pd.np.r _ [: 2, -2: 0]] ' –

0

Sie Vorteil der Pandas isin Funktion übernehmen kann.

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 
Verwandte Themen