name funcion example columns column python pandas dataframe ipython selection

funcion - Selección con.loc en python



pandas select rows (4)

Es un marco de datos de pandas y usa la herramienta de selección de base de etiquetas con df.loc y en él, hay dos entradas, una para la fila y otra para la columna, por lo que en la entrada de la fila está seleccionando todos esos valores de fila donde el valor guardado en la columna ''clase'' es ''versicolor'', y en la entrada de la columna está seleccionando la columna con la etiqueta ''clase'', y asignándoles un valor de ''Iris-versicolor''. Así que básicamente está reemplazando todas las celdas de la columna ''clase'' con el valor ''versicolor'' con ''Iris-versicolor''.

Vi este código en el cuaderno de iPython de alguien, y estoy muy confundido sobre cómo funciona este código. Por lo que entendí, pd.loc [] se utiliza como un indexador basado en la ubicación donde el formato es:

df.loc[index,column_name]

Sin embargo, en este caso, el primer índice parece ser una serie de valores booleanos. ¿Podría alguien explicarme cómo funciona esta selección? Intenté leer la documentación pero no pude encontrar una explicación. ¡Gracias!

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



Esto es usar los marcos de datos del paquete pandas . La parte de "índice" puede ser un índice único, una lista de índices o una lista de valores booleanos. Se puede leer sobre esto en la documentación: https://pandas.pydata.org/pandas-docs/stable/indexing.html

Por lo tanto, la parte del index especifica un subconjunto de las filas a extraer, y el nombre de columna (opcional) especifica la columna con la que desea trabajar desde ese subconjunto del marco de datos. Entonces, si desea actualizar la columna ''clase'' pero solo en las filas donde la clase está configurada actualmente como ''versicolor'', puede hacer algo como lo que enumera en la pregunta:

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


pd.DataFrame.loc puede tomar uno o dos indexadores. Para el resto de la publicación, representaré el primer indexador como i y el segundo indexador como j .

Si solo se proporciona un indexador, se aplica al índice del marco de datos y se supone que el indexador faltante representa todas las columnas. Así que los siguientes dos ejemplos son equivalentes.

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

Donde : se utiliza para representar todas las columnas.

Si ambos indizadores están presentes, i referencia a valores de índice y j referencia a valores de columna.

Ahora podemos centrarnos en qué tipos de valores i y j pueden asumir. Usemos el siguiente marco de datos df como nuestro ejemplo:

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

loc ha sido escrito de tal manera que i y j pueden ser

  1. Scalars que deberían ser valores en los respectivos objetos de índice.

    df.loc[''A'', ''Y''] 2

  2. matrices cuyos elementos también son miembros del objeto de índice respectivo (observe que se respeta el orden de la matriz que paso a loc

    df.loc[[''B'', ''A''], ''X''] B 3 A 1 Name: X, dtype: int64

    • Observe la dimensionalidad del objeto de retorno al pasar matrices. i es una matriz como estaba arriba, loc devuelve un objeto en el que se devuelve un índice con esos valores. En este caso, como j era un escalar, loc devolvió un objeto pd.Series . Podríamos haber manipulado esto para devolver un marco de datos si pasáramos una matriz para i y j , y la matriz podría haber sido solo una matriz con un solo valor.

      df.loc[[''B'', ''A''], [''X'']] X B 3 A 1

  3. matrices booleanas cuyos elementos son True o False y cuya longitud coincide con la longitud del índice respectivo. En este caso, loc simplemente toma las filas (o columnas) en las que la matriz booleana es True .

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

Además de los indexadores que puede pasar a loc , también le permite realizar asignaciones. Ahora podemos desglosar la línea de código que proporcionó.

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

  1. iris_data[''class''] == ''versicolor'' devuelve una matriz booleana.
  2. class es un escalar que representa un valor en el objeto de columnas.
  3. iris_data.loc[iris_data[''class''] == ''versicolor'', ''class''] devuelve un objeto pd.Series que consiste en la columna ''class'' para todas las filas donde ''class'' es ''versicolor''
  4. Cuando se usa con un operador de asignación:

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

    Asignamos ''Iris-versicolor'' para todos los elementos en la columna ''class'' donde ''class'' era ''versicolor''