Comparé à Excel, le fonctionnement de la fonction if (df.where et df.mask) peut être facilement réalisé avec pandas

Appelez - moi frère. 2022-01-15 03:49:35 阅读数:584

compar excel le fonctionnement la

Bonjour tout le monde,C'est moi..

In Excel MoyenneIF FonctionsEst l'une des fonctions les plus couramment utilisées,Il permet une comparaison logique des valeurs et des attentes. Donc,IF L'instruction peut avoir deux résultats: Le premier résultat est une comparaison True,Le deuxième résultat est une comparaison False.

Par exemple,=IF(C2=”Yes”,1,2) Représentation IF(C2 = Yes, Renvoie 1, Sinon, retournez à 2).

Alors,InPandasComment pouvons - nous faire ça facilement?

Aujourd'hui,Voyons voir!

Table des matières:

1. Besoins en matière de cas

Les données brutes sont les suivantes:,C'est une transcription d'étudiant fictive

Nom Langues Mathématiques Anglais Sexe
Mon frère. 91 95 92 1
Xiao Ming 82 93 91 1
Xiaohua. 82 87 94 1
Graminées 46 55 58 0
Petit Rouge. 51 41 70 0
Les petites fleurs 58 59 40 0
Bruce Lee. 70 55 59 1
Jack. 53 44 42 1
Han meimei 45 51 67 0

Maintenant nous avons deux besoins:

  • Anglais trilingue Rating,Inférieur à60Note de passage、60-89Pour réussir、90Un score supérieur à;
  • Femmes1Pour les hommes、0Pour les femmes.

2. ExcelC'est facile

Si elle est utiliséeExcelPour s'en occuper., On peut d'abord penser à utiliser IFLa méthode de la fonction

Pour la notation des cours de langue, de chiffres et d'anglais , Vous pouvez le faire en utilisant la formule suivante :

=IF(B2<60,"Échec",IF(B2<90,"Réussite","Des notes élevées"))

 Note du compte anglais

Pour les marqueurs de genre , Vous pouvez le faire en utilisant la formule suivante :

=IF(E2=1,"Hommes","Femme")

 Identification par sexe

Bien sûr.,Ce qui précèdeIFLa méthode de la fonction,On peut encore l'utiliser.lookupRéalisation:

# Note de trois matières en dehors de la langue
=LOOKUP(B2,{0,"Échec";60,"Réussite";90,"Des notes élevées"})
# Identification par sexe
=LOOKUP(E2,{0,"Femme";1,"Hommes"})

LOOKUPTechnique

Il est important de noter que,LOOKUPLa condition estRétrocompatibilitéHa!

3. PandasTraitement

Par icidf.whereEtnp.where Deux fonctions pour répondre aux exigences ,Regardez d'abord le Code., Ensuite, nous expliquerons

import pandas as pd
# Lire les données
df = pd.read_excel(r'F:\Python\pandasTraitement des données\Données de cas.xlsx')
# Filtrage Hors nombre Notation
score = df.loc[:,'Langues':'Anglais']
# Note
data = score.where(score>100, np.where(score<60,"Échec", np.where(score<90,"Réussite","Des notes élevées")))
# Sexe
data['Sexe'] = df['Sexe'].where(df['Sexe']>100, np.where(df['Sexe']==0, 'Femmes', 'Hommes'))
data.insert(0,'Nom', df['Nom'])
data

Résultats obtenus

Dans le schéma de réalisation ci - dessus , Les deux. whereFonctions,En fait, c'est justeexcelÀ l'intérieur.ifC'est très similaire..

df.where

Cette fonction filtre les fonctions qui remplissent les conditions , Assigner une valeur qui ne satisfait pas à la condition à une autre valeur ,Par défautNaN.

Signature:
df.where(
cond,
other=nan,
inplace=False,
axis=None,
level=None,
errors='raise',
try_cast=<no_default>,
)
Docstring:
Replace values where the condition is False.

D'après l'introduction de la fonction , Il n'y a qu'un seul jugement conditionnel qu'il peut faire , Ensuite, vous ne pouvez assigner que des valeurs qui ne répondent pas aux exigences ,Par exemple,:

# Afficher≥60Valeur de,Inférieur à60 Afficher sous Échec
df[['Langues','Mathématiques','Anglais']].where(df[['Langues','Mathématiques','Anglais']]>60, 'Échec')

df.where

np.where

Puisquedf.where Impossible d'attribuer des valeurs distinctes pour plusieurs cas , Alorsnp.whereC'est parti.

Docstring:
where(condition, [x, y])
Return elements chosen from `x` or `y` depending on `condition`.
Parameters
----------
condition : array_like, bool
Where True, yield `x`, otherwise yield `y`.
x, y : array_like
Values from which to choose. `x`, `y` and `condition` need to be
broadcastable to some shape.
Returns
-------
out : ndarray
An array with elements from `x` where `condition` is True, and elements
from `y` elsewhere.

EtExcelMoyenneIFFonctionsPlus prèsEn fait,np.whereCette fonction, Assigner une valeur si la condition est remplie x,Sinon, assignery.

Par exemple,:

>>> import numpy as np
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a)
array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])

Dans l'exemple ci - dessus,Si la valeur est inférieure à5, Afficher la valeur elle - même ;Et inversement, Multiplié par10.

Nous pouvons construire des conditions à deux niveaux pour évaluer la notation des sujets ,Les détails sont les suivants:

# Si moins de60 J'ai échoué. , Sinon, un jugement ultérieur 
np.where(score<60,"Échec", np.where(score<90,"Réussite","Des notes élevées"))

Sur la base de l'introduction ci - dessus , Pour répondre à cette demande, nous avons les solutions de mise en oeuvre suivantes :

# Filtrage Hors nombre Notation
score = df.loc[:,'Langues':'Anglais']
# Note
data = score.where(score>100, np.where(score<60,"Échec", np.where(score<90,"Réussite","Des notes élevées")))
# Sexe
data['Sexe'] = np.where(df['Sexe']==0, 'Femmes', 'Hommes')

Il est important de noter que, Ici, notre traitement de l'identité de genre est légèrement différent de celui du code complet au début , Tout le monde sait pourquoi on peut écrire ça ?(DataFrameEtSeries Une petite différence )

Ci - dessus, C'est pour cette fois. PandasRéalisationExcel- Oui.IF Fonctionnement de la méthode de fonction , Si vous êtes intéressé, vous pouvez essayer Oh !

4. Extension

tips one

Maintenant qu'il y a df.where Filtrer les valeurs qualifiées pour afficher , Assigner une valeur si elle n'est pas satisfaite .Alors, Est - ce qu'il y a des valeurs filtrées qui remplissent les conditions pour l'affectation , Et si les valeurs insatisfaisantes étaient affichées ?

La réponse est oui.!

C'estdf.maskMéthode fonctionnelle,Ses effets etdf.where Au contraire. .

>>> import pandas as pd
>>> s = pd.Series(range(5))
>>> s.where(s > 0)
0 NaN
1 1.0
2 2.0
3 3.0
4 4.0
dtype: float64
>>> s.mask(s > 0)
0 0.0
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64
>>> s.where(s > 1, 10)
0 10
1 10
2 2
3 3
4 4
dtype: int64
>>> s.mask(s > 1, 10)
0 0
1 1
2 10
3 10
4 10
dtype: int64

tips two

En fait..., Il y a beaucoup d'options pour répondre aux besoins de notre cas aujourd'hui , Voici quelques idées ( Les réponses se trouvent dans les tweets suivants )

  • Adoption Fonction personnalisée if elsePour s'en occuper.,Et puisapplyOumapAppelez
  • Adoption cutCompartimentage Pour s'en occuper.
  • Adoption replace Pour s'en occuper.
  • Ou whereAvecmask Combiner pour traiter
  • Autres programmes

Amis intéressés,Je peux essayer., Et puis nous communiquons ensemble

Ajouter l'auteur Wechat gdc2918, Rejoignez le Groupe d'échange ~~

版权声明:本文为[Appelez - moi frère.]所创,转载请带上原文链接,感谢。 https://pythonmana.com/2022/01/202201080611484785.html