In den folgenden Situationen verhalten sie sich gleich:
- Eine einzelne Spalte auswählen (
df['A']
die gleichen wie df.loc[:, 'A']
-> wählt Spalte A)
- Auswählen einer Liste von Spalten (
df[['A', 'B', 'C']]
die gleiche wie df.loc[:, ['A', 'B', 'C']]
-> wählt die Spalten A, B und C)
- Slicing von Reihen (
df[1:3]
ist das gleiche wie df.iloc[1:3]
-> wählt die Zeilen 1 und 2. Beachten Sie jedoch, wenn Sie Zeilen mit in Scheiben schneiden loc
, statt iloc
. Sie werden die Zeilen 1 bekommen, 2 und 3 unter der Annahme , Sie RandeIndex haben Details sehen hier .)
Funktioniert jedoch []
nicht in den folgenden Situationen:
- Sie können eine einzelne Zeile mit auswählen
df.loc[row_label]
- Sie können eine Liste von Zeilen mit auswählen
df.loc[[row_label1, row_label2]]
- Sie können Spalten mit schneiden
df.loc[:, 'A':'C']
Diese drei können nicht erledigt werden []
. Noch wichtiger ist, dass die Zuweisung problematisch wird, wenn Ihre Auswahl sowohl Zeilen als auch Spalten umfasst.
df[1:3]['A'] = 5
Dies wählt die Zeilen 1 und 2 aus, wählt dann die Spalte 'A' des zurückkehrenden Objekts aus und weist ihm den Wert 5 zu. Das Problem ist, dass das zurückgebende Objekt möglicherweise eine Kopie ist, sodass der tatsächliche DataFrame dadurch möglicherweise nicht geändert wird. Dies löst SettingWithCopyWarning aus . Der richtige Weg für diese Zuordnung ist
df.loc[1:3, 'A'] = 5
Mit .loc
wird garantiert, dass Sie den ursprünglichen DataFrame ändern. Außerdem können Sie Spalten ( df.loc[:, 'C':'F']
) in Scheiben schneiden , eine einzelne Zeile ( df.loc[5]
) auswählen und eine Liste von Zeilen ( df.loc[[1, 2, 5]]
) auswählen .
Beachten Sie auch, dass diese beiden nicht gleichzeitig in der API enthalten waren. .loc
wurde viel später als leistungsfähigerer und expliziter Indexer hinzugefügt. Weitere Informationen finden Sie in der Antwort von unutbu .
Hinweis: Das Abrufen von Spalten mit []
vs .
ist ein völlig anderes Thema. .
ist nur zur Bequemlichkeit da. Es ist nur der Zugriff auf Spalten möglich, deren Name eine gültige Python-Kennung ist (dh sie dürfen keine Leerzeichen enthalten, sie können nicht aus Zahlen bestehen ...). Es kann nicht verwendet werden, wenn die Namen mit Series / DataFrame-Methoden in Konflikt stehen. Es kann auch nicht für nicht vorhandene Spalten verwendet werden (dh die Zuweisung df.a = 1
funktioniert nicht, wenn keine Spalte vorhanden ist a
). Davon abgesehen .
und []
sind gleich.
df.col1
? Alle drei sind im Wesentlichen gleichwertig für den sehr einfachen Fall der Auswahl einer Spalte..loc
Damit können Sie viel mehr tun, als nur eine Spalte auszuwählen. Mögliches Duplikat von stackoverflow.com/questions/31593201/…