it-swarm.com.de

Auswahl mit .loc in Python

Ich habe diesen Code in einem iPython-Notizbuch von jemandem gesehen und bin sehr verwirrt, wie dieser Code funktioniert. Soweit ich verstanden habe, wird pd.loc [] als standortbasierter Indexer verwendet, dessen Format wie folgt lautet:

df.loc[index,column_name]

In diesem Fall scheint der erste Index jedoch eine Reihe boolescher Werte zu sein. Könnte mir bitte jemand erklären, wie diese Auswahl funktioniert. Ich habe versucht, die Dokumentation durchzulesen, konnte aber keine Erklärung finden. Vielen Dank!

iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'

 enter image description here

26
bugsyb

pd.DataFrame.loc kann einen oder zwei Indexer enthalten. Für den Rest des Beitrags repräsentiere ich den ersten Indexer als i und den zweiten Indexer als j.

Wenn nur ein Indexer bereitgestellt wird, gilt dieser für den Index des Datenrahmens, und es wird angenommen, dass der fehlende Indexer alle Spalten darstellt. Die folgenden zwei Beispiele sind also gleichwertig.

  1. df.loc[i]
  2. df.loc[i, :]

Dabei wird : zur Darstellung aller Spalten verwendet.

Wenn beide Indexer vorhanden sind, verweist i auf Indexwerte und j auf Spaltenwerte.


Nun können wir uns darauf konzentrieren, welche Werttypen i und j annehmen können. Verwenden wir den folgenden Datenrahmen df als unser Beispiel:

    df = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'], columns=['X', 'Y'])

loc wurde so geschrieben, dass i und j sein können

  1. Skalare Dies sollten Werte in den jeweiligen Indexobjekten sein

    df.loc['A', 'Y']
    
    2
    
  2. Arrays deren Elemente auch Mitglieder des jeweiligen Indexobjekts sind (Beachten Sie, dass die Reihenfolge des Arrays, das ich an loc übergeben habe, beachtet wird

    df.loc[['B', 'A'], 'X']
    
    B    3
    A    1
    Name: X, dtype: int64
    
    • Beachten Sie die Dimensionalität des zurückgegebenen Objekts, wenn Sie Arrays übergeben. i ist ein Array wie es oben war. loc gibt ein Objekt zurück, in dem ein Index mit diesen Werten zurückgegeben wird. In diesem Fall hat j ein pd.Series-Objekt zurückgegeben, da loc ein Skalar war. Wir hätten dies manipulieren können, um ein Datenframe zurückzugeben, wenn wir ein Array für i und j übergeben hätten, und das Array hätte nur ein einzelnes Array sein können.

      df.loc[['B', 'A'], ['X']]
      
         X
      B  3
      A  1
      
  3. boolesche Arrays deren Elemente True oder False sind und deren Länge mit der Länge des jeweiligen Index übereinstimmt. In diesem Fall greift loc einfach die Zeilen (oder Spalten) auf, in denen das boolesche Array True ist.

    df.loc[[True, False], ['X']]
    
       X
    A  1
    

Neben den Indexern, die Sie an loc übergeben können, können Sie auch Zuweisungen vornehmen. Jetzt können wir die von Ihnen bereitgestellte Codezeile aufschlüsseln.

iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
  1. iris_data['class'] == 'versicolor' gibt ein boolesches Array zurück.
  2. class ist ein Skalar, der einen Wert im Spaltenobjekt darstellt.
  3. iris_data.loc[iris_data['class'] == 'versicolor', 'class'] gibt ein pd.Series-Objekt aus der 'class'-Spalte für alle Zeilen zurück, in denen 'class''versicolor' ist.
  4. Bei Verwendung mit einem Zuweisungsoperator:

    iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
    

    Wir vergeben 'Iris-versicolor' für alle Elemente in der Spalte 'class', wobei 'class''versicolor' war.

51
piRSquared

Es handelt sich um einen Pandas-Datenrahmen. Er verwendet ein Label-Base-Auswahlwerkzeug mit df.loc. Darin befinden sich zwei Eingaben, eine für die Zeile und eine andere für die Spalte. In der Zeilen-Eingabe werden also alle Zeilenwerte ausgewählt, in denen der Der in der Spalte 'class' gespeicherte Wert ist 'versicolor', und in der Spalteneingabe wählt er die Spalte mit der Bezeichnung 'class' aus und weist ihnen den 'Iris-versicolor'-Wert zu .. .. Im Grunde werden alle Zellen von ersetzt Spalte 'Klasse' mit Wert 'Versicolor' mit 'Iris-Versicolor'.

3
Aashish Kumar

Hierbei werden Datenrahmen aus dem Paket pandas verwendet. Der "Index" -Teil kann entweder ein einzelner Index, eine Liste von Indizes oder eine Liste von Booleans sein. Dies kann in der Dokumentation nachgelesen werden: https://pandas.pydata.org/pandas-docs/stable/indexing.html

Der Teil index gibt also eine Teilmenge der Zeilen an, die abgerufen werden sollen, und der (optionale) column_name gibt die Spalte an, mit der Sie von dieser Teilmenge des Datenrahmens arbeiten möchten. Wenn Sie also die Spalte "class" aktualisieren möchten, aber nur in Zeilen, in denen die Klasse derzeit als "versicolor" festgelegt ist, tun Sie möglicherweise etwas, was Sie in der Frage auflisten:

iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
3
LangeHaare

Es ist eine pandas Label-basierte Auswahl, wie hier erklärt: https://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label

Das boolesche Array ist im Wesentlichen eine Auswahlmethode, die eine Maske verwendet.

0
Def_Os