Python: Pandas Serie - Warum mit der loc?
Warum verwenden wir 'loc' für pandas dataframes? es scheint, die folgenden code mit oder ohne Verwendung von loc beide kompilieren anr laufen simulular Geschwindigkeit
%timeit df_user1 = df.loc[df.user_id=='5561']
100 loops, best of 3: 11.9 ms per loop
oder
%timeit df_user1_noloc = df[df.user_id=='5561']
100 loops, best of 3: 12 ms per loop
Warum also loc?
Edit: Dies wurde gekennzeichnet als eine doppelte Frage. Aber obwohl pandas iloc vs ix vs loc Erklärung? erwähnt, dass *
können Sie tun, Spalte Abruf nur durch die Verwendung der Daten-frame ist
getitem:
*
df['time'] # equivalent to df.loc[:, 'time']
es nicht sagen, warum wir verwenden, loc, obwohl es erklärt viele Eigenschaften von loc, meine konkrete Frage ist: "warum nicht einfach weglassen loc insgesamt'? für die ich angenommen haben, eine sehr ausführliche Antwort unten.
Auch die anderen post die Antwort (was ich nicht glaube ist eine Antwort) ist sehr versteckt in der Diskussion und jede person, die nach dem suchen, was ich suchte, würde es schwierig finden, um die gewünschten Informationen finden und würde viel besser gedient, indem die Antwort auf meine Frage.
- Mögliche Duplikate von pandas iloc vs ix vs loc Erklärung?
- nicht wirklich, es sind Sie diskutieren Sie den Unterschied zwischen .loc .iloc und .- ix, aber hier bin ich einfach zu Fragen, warum .loc überhaupt nicht, warum es über .iloc oder .ix, Im nicht interessiert, iloc oder ix, Im Versuch zu verstehen, loc ersten und warum wir es verwenden, im Gegensatz zu nur verlassen Sie mit nichts in seinem Ort.
- das Ende des Antwort von ajcr, die enthält eine Allgemeine Nutzung sowohl
.loc
und.iloc
vs.ix
: oder die relavent Teil ", wenn Sie nur die Indizierung durch die Verwendung von labels, oder nur die Indizierung unter Verwendung der integer-Positionen, stick mit loc oder iloc um unerwartete Ergebnisse zu vermeiden." - Pandas fällt zurück auf
.iloc
wenn.loc
nichts zurück glaubwürdig. Hier ist eine aktuelle Diskussion zum Thema stackoverflow.com/questions/38860772/... Deine Frage ist eine exakte Kopie von dieser, leider. - Wie groß der dataframe ist ?
- Im wesentlichen gibt es fallen Rücken und besten Vermutungen, dass pandas macht, wenn Sie nicht geben Sie die Indizierung Technik. So geht es durch jeden von Ihnen. Auf einen DataFrame, der Standardwert ist die Verwendung
.loc
auf Spalten. Reihe, der Standardwert ist die Verwendung.loc
auf Zeilen, denn es gibt keine Spalten. - JGreenwell und Kartik - verstehe ich nicht. Ich bin nicht, ich wiederhole, ich bin nicht daran interessiert, irgendetwas zu tun .iloc, können nur so tun .iloc nicht vorhanden und können so tun .ix nicht vorhanden. Ich will nur wissen, warum ich verwenden soll .loc, anstatt einfach verlassen Sie alle zusammen wie in dem code in meiner Frage.
- Die Verwendung von
__getitem__
im Vergleich .loc ist erklärt, in der zweiten Antwort in die Frage, die ich verlinkt - Verwandte: der Umgang mit SettingWithCopyWarning in pandas? (insbesondere, siehe die Antwort von mir)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Explizit ist besser als implizit.
df[boolean_mask]
wählt Zeilen aus, in denenboolean_mask
ist Wahr, aber es gibt eine Ecke Fall, wenn Sie nicht möchten, könnte es zu: wenndf
hat boolean-Wert der Spalte Etiketten:Möchten Sie vielleicht die Verwendung
df[[True]]
wählen Sie dieTrue
Spalte. Stattdessen wirft er eineValueError
:Vergleich
loc
:Demgegenüber die folgenden nicht erhöhen
ValueError
obwohl die Struktur derdf2
ist fast das gleiche wiedf1
oben:So
df[boolean_mask]
nicht immer Verhalten sich genauso wiedf.loc[boolean_mask]
. Obwohl dies ist wohl einer unwahrscheinlichen Fall verwenden, würde ich empfehlen immer mitdf.loc[boolean_mask]
stattdf[boolean_mask]
weil die Bedeutung vondf.loc
's syntax ist eindeutig. Mitdf.loc[indexer]
Sie automatisch wissen, dassdf.loc
ist die Auswahl von Zeilen. Im Gegensatz, es ist nicht klar, obdf[indexer]
wird, wählen Sie die Zeilen oder Spalten (oder erhöhenValueError
), ohne zu wissen, details überindexer
unddf
.df.loc[row_indexer, column_index]
können wählen Sie die Zeilen und Spalten.df[indexer]
können nur wählen Sie die Zeilen oder Spalten je nach der Art der Werte inindexer
und den Typ der Spalte Wertedf
hat (mal wieder, sind Sie boolean?).Wenn ein slice übergeben
df.loc
die end-Punkte sind im Lieferumfang enthalten. Wenn ein slice übergebendf[...]
, wird das Stück interpretiert wird, als ein halb-offenes Intervall:df[['True']]
korrekt?