Por que usar "==" retorna uma série em vez de bool nos pandas?

8

Eu simplesmente não consigo descobrir o que "==" significa na segunda linha:
- Não é um teste, não existe uma declaração if ...
- Não é uma declaração variável ...

Eu nunca vi isso antes, a coisa é data.ctage==caté uma série de pandas e não um teste ...

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
Amaumox
fonte
1
Talvez eles estejam fazendo uma comparação entre elementos de duas matrizes numpy e usando a matriz booleana resultante como um seletor de dados? stackoverflow.com/questions/10580676/… Pandas é estranho.
Neil
1
É uma máscara como positive_X = X[X > 0]de numpy.
Guimoute 20/04

Respostas:

10

Ele está testando cada elemento da data.categigualdade com cat. Isso produz um vetor de valores Verdadeiro / Falso. Isso é passado como no indexador para data[], que retorna as linhas datacorrespondentes aos valores True no vetor.

Para resumir, a expressão inteira retorna o subconjunto de linhas de dataonde o valor de data.categé igual cat.

(Parece possível que toda a operação possa ser feita com mais elegância data.groupBy('categ').apply(someFunc).)

Dave Costa
fonte
2

Ele cria uma série booleana com índices onde data.categé igual a cat, com essa máscara booleana, você pode filtrar seu quadro de dados, ou seja subset, terá todos os registros em que esse categé o valor armazenado cat.

Este é um exemplo usando dados 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
jcaliz
fonte
2

Sim, é um teste. Expressões booleanas não estão restritas a ifinstruções.

Parece que dataé um quadro de dados (PANDAS). A expressão usada como um índice de quadro de dados é como o PANDAS indica um seletor ou filtro. Isso diz para selecionar todas as linhas nas quais o fieled categcorresponde à variável cat(aparentemente uma variável predefinida). Essa coleção de linhas se torna um novo quadro de dados subset.

Ameixa seca
fonte
2

data.categ == catretornará uma lista booleana que será usada para filtrar seu quadro de dados, deixando apenas valores onde booleano é igual True.

Booleanos são usados ​​em muitas situações, não apenas em ifdeclarações.

Henrique Branco
fonte
2

Aqui você está verificando data.categcom o elemento iterating,, catno dicionário de data.
E se eles são iguais, você continua o ciclo.

Harshit Ruwali
fonte