¿Por qué el uso de "==" devuelve una serie en lugar de bool en pandas?


8

Simplemente no puedo entender qué significa "==" en la segunda línea:
- No es una prueba, no hay una declaración if ...
- No es una declaración variable ...

Nunca he visto esto antes, la cosa data.ctage==cates una serie de pandas y no una prueba ...

for cat in data["categ"].unique():
    subset = data[data.categ == cat] # Création du sous-échantillon
    print("-"*20)
    print('Catégorie : ' + cat)
    print("moyenne:\n",subset['montant'].mean())
    print("mediane:\n",subset['montant'].median())
    print("mode:\n",subset['montant'].mode())
    print("VAR:\n",subset['montant'].var())
    print("EC:\n",subset['montant'].std())
    plt.figure(figsize=(5,5))
    subset["montant"].hist(bins=30) # Crée l'histogramme
    plt.show() # Affiche l'histogramme

1
¿Quizás están haciendo una comparación por elementos de dos matrices numpy y están utilizando la matriz booleana resultante como un selector de datos? stackoverflow.com/questions/10580676/… Pandas es raro.
Neil

1
Es una máscara como positive_X = X[X > 0]de numpy.
Guimoute

Respuestas:


10

Está probando cada elemento de data.categigualdad con cat. Eso produce un vector de valores Verdadero / Falso. Esto se pasa como en el indexador a data[], que devuelve las filas dedata correspondientes a los valores verdaderos en el vector.

Para resumir, la expresión completa devuelve el subconjunto de filas desde datadonde el valor de data.categes igualcat .

(Parece posible que toda la operación se pueda hacer de manera más elegante data.groupBy('categ').apply(someFunc)).


2

Crea una serie booleana con índices donde data.categes igual cat, con esta máscara booleana, puede filtrar su marco de datos, en otras palabras subset, tendrá todos los registros donde categestá el valor almacenado encat .

Este es un ejemplo usando datos numéricos

np.random.seed(0)
a = np.random.choice(np.arange(2), 5)
b = np.random.choice(np.arange(2), 5)
df = pd.DataFrame(dict(a = a, b = b))


df[df.a == 0].head()

#   a   b
# 0 0   0
# 2 0   0
# 4 0   1

df[df.a == df.b].head()

#   a   b
# 0 0   0
# 2 0   0
# 3 1   1

2

Si, es una prueba. Las expresiones booleanas no están restringidas aif declaraciones.

Parece que dataes un marco de datos (PANDAS). La expresión utilizada como índice de marco de datos es cómo PANDAS denota un selector o filtro. Esto dice que seleccione cada fila en la que el campo categcoincida con la variable cat(aparentemente una variable predefinida). Esta colección de filas se convierte en una nueva trama de datos, subset.


2

data.categ == catdevolverá una lista booleana que se usará para filtrar su marco de datos al incluir solo valores donde boolean es igual True.

Los booleanos se usan en muchas situaciones, no solo en ifdeclaraciones.


2

Aquí está comprobando data.categcon el elemento iterando,, caten el diccionario de data.
Y si son iguales, continuará el ciclo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.