Wählen Sie Pandas-Zeilen basierend auf dem Listenindex aus

105

Ich habe einen Datenrahmen df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Dann möchte ich Zeilen mit bestimmten Folgenummern auswählen, die in einer Liste angegeben sind. Angenommen, hier ist [1,3], dann links:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Wie oder welche Funktion kann das?

user2806761
quelle

Antworten:

130
List = [1, 3]
df.ix[List]

sollte den Trick machen! Wenn ich mit Datenrahmen indiziere, verwende ich immer die .ix () -Methode. Es ist so viel einfacher und flexibler ...

UPDATE Dies ist nicht mehr die akzeptierte Methode zur Indizierung. Die ixMethode ist veraltet. Verwendung .ilocfür die ganzzahlige Indizierung und .locfür die beschriftungsbasierte Indizierung.

Woody Pride
quelle
14
Dies ist jetzt veraltet, .iloc sollte für die Positionsindizierung verwendet werden
t_warsop
85

Sie können auch iloc verwenden:

df.iloc[[1,3],:]

Dies funktioniert nicht, wenn die Indizes in Ihrem Datenrahmen aufgrund vorheriger Berechnungen nicht der Reihenfolge der Zeilen entsprechen. In diesem Fall verwenden Sie:

df.index.isin([1,3])

... wie in anderen Antworten vorgeschlagen.

Yemu
quelle
60

Ein anderer Weg (obwohl es ein längerer Code ist), aber es ist schneller als die obigen Codes. Überprüfen Sie es mit der% timeit-Funktion:

df[df.index.isin([1,3])]

PS: Sie finden den Grund heraus

Geben Sie hier die Bildbeschreibung ein

Amruth Lakkavaram
quelle
1
Verwendung df.index.get_level_values(0).isinfür Multiindex
CiaranWelsh
4

Bei großen Datenmengen ist es speichereffizient, nur ausgewählte Zeilen über den skiprowsParameter zu lesen .

Beispiel

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Dadurch wird nun ein DataFrame aus einer Datei zurückgegeben, die alle Zeilen außer 1 und 3 überspringt.


Einzelheiten

Aus den Dokumenten :

skiprows : listähnlich oder ganzzahlig oder aufrufbar, Standard None

...

Wenn aufrufbar, wird die aufrufbare Funktion anhand der Zeilenindizes ausgewertet und gibt True zurück, wenn die Zeile übersprungen werden soll, andernfalls False. Ein Beispiel für ein gültiges aufrufbares Argument wärelambda x: x in [0, 2]

Diese Funktion funktioniert in Version Pandas 0.20.0+. Siehe auch das entsprechende Problem und einen verwandten Beitrag .

Pylang
quelle