python - slicing - select row in dataframe




Selezione con.loc in python (3)

È la selezione basata su etichette pandas , come spiegato qui: https://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label

L'array booleano è fondamentalmente un metodo di selezione che utilizza una maschera.

Ho visto questo codice nel taccuino iPython di qualcuno e sono molto confuso su come funziona questo codice. Per quanto ho capito, pd.loc [] viene utilizzato come indicizzatore basato sulla posizione in cui il formato è:

df.loc[index,column_name]

Tuttavia, in questo caso, il primo indice sembra essere una serie di valori booleani. Qualcuno potrebbe spiegarmi come funziona questa selezione. Ho provato a leggere la documentazione ma non sono riuscito a capire una spiegazione. Grazie!

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


È un data frame pandas e usa lo strumento di selezione base label con df.loc e in esso ci sono due input, uno per la riga e l'altro per la colonna, quindi nell'input della riga si selezionano tutti quei valori di riga in cui il valore salvato nella colonna 'class' è 'versicolor' e nell'ingresso della colonna seleziona la colonna con l'etichetta 'class' e assegna loro il valore 'Iris-versicolor'. Quindi in pratica sta sostituendo tutte le celle della colonna 'classe' con valore 'versicolor' con 'Iris-versicolor'.


pd.DataFrame.loc può prendere uno o due indicizzatori. Per il resto del post, rappresenterò il primo indicizzatore come i e il secondo indicizzatore come j .

Se viene fornito un solo indicizzatore, si applica all'indice del dataframe e si presume che l'indicizzatore mancante rappresenti tutte le colonne. Quindi i seguenti due esempi sono equivalenti.

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

Dove : è usato per rappresentare tutte le colonne.

Se sono presenti entrambi gli indicizzatori, faccio riferimento ai valori dell'indice e ai valori delle colonne di riferimento j .

Ora possiamo concentrarci su quali tipi di valori i e j possiamo assumere. Usiamo il seguente dataframe df come esempio:

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

loc è stato scritto in modo tale che i e j possiamo essere

  1. scalari che dovrebbero essere valori nei rispettivi oggetti indice

    df.loc['A', 'Y']
    
    2
  2. array i cui elementi sono anche membri del rispettivo oggetto indice (si noti che l'ordine dell'array che passo alla loc è rispettato

    df.loc[['B', 'A'], 'X']
    
    B    3
    A    1
    Name: X, dtype: int64
    • Notare la dimensionalità dell'oggetto restituito quando si superano gli array. i è un array come era in precedenza, loc restituisce un oggetto in cui viene restituito un indice con tali valori. In questo caso, poiché j era uno scalare, loc restituiva un oggetto pd.Series . Potremmo averlo manipolato per restituire un dataframe se avessimo passato un array per i e j , e l'array avrebbe potuto essere un array di valore singolo.

      df.loc[['B', 'A'], ['X']]
      
         X
      B  3
      A  1
  3. array booleani i cui elementi sono True o False e la cui lunghezza corrisponde alla lunghezza del rispettivo indice. In questo caso, loc semplicemente afferra le righe (o le colonne) in cui l'array booleano è True .

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

Oltre a ciò che gli indicizzatori puoi passare a loc , consente anche di effettuare assegnazioni. Ora possiamo suddividere la linea di codice che hai fornito.

iris_data.loc[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
  1. iris_data['class'] == 'versicolor' restituisce un array booleano.
  2. class è uno scalare che rappresenta un valore nell'oggetto colonne.
  3. iris_data.loc[iris_data['class'] == 'versicolor', 'class'] restituisce un oggetto pd.Series che consiste nella colonna 'class' per tutte le righe dove 'class' è 'versicolor'
  4. Se utilizzato con un operatore di assegnazione:

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

    Assegniamo 'Iris-versicolor' per tutti gli elementi nella colonna 'class' dove 'class' era 'versicolor'





selection