Ich habe einen Pandas-Datenrahmen df1
und df2
(df1 ist ein Vanila-Datenrahmen, df2 ist durch 'STK_ID' & 'RPT_Date' indiziert):
>>> df1
STK_ID RPT_Date TClose sales discount
0 000568 20060331 3.69 5.975 NaN
1 000568 20060630 9.14 10.143 NaN
2 000568 20060930 9.49 13.854 NaN
3 000568 20061231 15.84 19.262 NaN
4 000568 20070331 17.00 6.803 NaN
5 000568 20070630 26.31 12.940 NaN
6 000568 20070930 39.12 19.977 NaN
7 000568 20071231 45.94 29.269 NaN
8 000568 20080331 38.75 12.668 NaN
9 000568 20080630 30.09 21.102 NaN
10 000568 20080930 26.00 30.769 NaN
>>> df2
TClose sales discount net_sales cogs
STK_ID RPT_Date
000568 20060331 3.69 5.975 NaN 5.975 2.591
20060630 9.14 10.143 NaN 10.143 4.363
20060930 9.49 13.854 NaN 13.854 5.901
20061231 15.84 19.262 NaN 19.262 8.407
20070331 17.00 6.803 NaN 6.803 2.815
20070630 26.31 12.940 NaN 12.940 5.418
20070930 39.12 19.977 NaN 19.977 8.452
20071231 45.94 29.269 NaN 29.269 12.606
20080331 38.75 12.668 NaN 12.668 3.958
20080630 30.09 21.102 NaN 21.102 7.431
Ich kann die letzten 3 Zeilen von df2 erhalten durch:
>>> df2.ix[-3:]
TClose sales discount net_sales cogs
STK_ID RPT_Date
000568 20071231 45.94 29.269 NaN 29.269 12.606
20080331 38.75 12.668 NaN 12.668 3.958
20080630 30.09 21.102 NaN 21.102 7.431
während df1.ix[-3:]
alle Zeilen geben:
>>> df1.ix[-3:]
STK_ID RPT_Date TClose sales discount
0 000568 20060331 3.69 5.975 NaN
1 000568 20060630 9.14 10.143 NaN
2 000568 20060930 9.49 13.854 NaN
3 000568 20061231 15.84 19.262 NaN
4 000568 20070331 17.00 6.803 NaN
5 000568 20070630 26.31 12.940 NaN
6 000568 20070930 39.12 19.977 NaN
7 000568 20071231 45.94 29.269 NaN
8 000568 20080331 38.75 12.668 NaN
9 000568 20080630 30.09 21.102 NaN
10 000568 20080930 26.00 30.769 NaN
Warum ? Wie bekomme ich die letzten 3 Zeilen von df1
(Datenrahmen ohne Index)? Pandas 0.10.1
df[-3:]
, um die gewünschten Ergebnisse zu erzielen. Dies wurde von WesM als Fehler behoben. Nicht sicher, ob / wann es behoben wird: stackoverflow.com/questions/14035817/…ix
war ein Fehler, aber das Weitergeben von negativen Slices an__getitem__
ist kein Fehler .df.iloc[-3:]
intern delegiert an__getitem__
mit den gleichen Argumenten, dodf[-3:]
ist eine Abkürzung fürdf.iloc[-3:]
, kein Fehler.Antworten:
Vergiss nicht
DataFrame.tail
! z.Bdf1.tail(10)
quelle
Dies liegt an der Verwendung von Ganzzahlindizes (
ix
wählt diese nach Bezeichnung über -3 anstatt nach Position aus , und dies ist beabsichtigt : siehe Ganzzahlindizierung in Pandas "Fallstricke" *).* In neueren Versionen von Pandas bevorzugen Sie loc oder iloc, um die Mehrdeutigkeit von ix als Position oder Bezeichnung zu beseitigen:
Siehe die Dokumente .
Wie Wes betont, sollten Sie in diesem speziellen Fall nur den Schwanz verwenden!
quelle
Wenn Sie nach Position schneiden
__getitem__
(dh schneiden mit[]
), funktioniert dies gut und ist die prägnanteste Lösung, die ich für dieses Problem gefunden habe.Dies entspricht beispielsweise dem Aufruf
df.iloc[-3:]
(iloc
intern delegiert an__getitem__
).Wenn Sie außerdem die letzten N Zeilen für jede Gruppe suchen möchten, verwenden Sie
groupby
undGroupBy.tail
:quelle