2017-10-03 1 views
3
df = pd.DataFrame([[3,3,3]]*4,index=['a','b','c','d']) 

Während wir eine Kopie eines Abschnitts eines Indexes über die Angabe Zeilennummern wie unten extrahieren: i1 = df.index [1: 3] .copy()eine Liste von Datenrahmen-Index mit dem Index Schlüsselwert Aufruf

Leider können wir eine Kopie eines Abschnitts eines Indexes nicht durch Angabe des Schlüssels extrahieren (wie bei der Methode df.loc). Wenn ich die folgend versuchen:

i2=df.index['a':'c'].copy() 

ich die folgenden Fehler:

TypeError: slice indices must be integers or None or have an __index__ method 

Gibt es eine Alternative eine Teilmenge eines Index auf seinem Schlüssel basierte anrufen? Danke

Antwort

1

Versuchen .loc verwenden, finden Sie diese documentation:

i2 = df.loc['a':'c'].index 
print(i2) 

Ausgang:

Index(['a', 'b', 'c'], dtype='object') 

oder

df.loc['a':'c'].index.tolist() 

Ausgang:

['a', 'b', 'c'] 
+0

Dies scheint ein irrelevanter Kommentar zu sein, da dies nichts mit dem Index des df zu tun hat. – user7786493

+0

Aber dann ist es dasselbe wie meine Antwort ... – jezrael

+0

Mein schlechtes. Überdenken Sie Ihre Lösung für eine Weile, es ist eigentlich eine gute Lösung. – user7786493

2

Simpliest ist loc mit index:

i1 = df.loc['b':'c'].index 
print (i1) 
Index(['b', 'c'], dtype='object') 

Oder besteht die Möglichkeit, get_loc für Positionen:

i1 = df.index 

i1 = i1[i1.get_loc('b') : i1.get_loc('d') + 1] 
print (i1) 
Index(['b', 'c'], dtype='object') 

i1 = i1[i1.get_loc('b') : i1.get_loc('d') + 1] 
print (i1) 
Index(['b', 'c', 'd'], dtype='object') 

Alternative:

i1 = i1[i1.searchsorted('b') : i1.searchsorted('d') + 1] 
print (i1) 
Index(['b', 'c', 'd'], dtype='object') 
+1

Große Antwort! +1 –

Verwandte Themen