[PYTHON] Y a-t-il NaN dans le DataFrame pandas?

J'ai cherché un peu et je n'ai pas pu le trouver, alors j'ai réussi à comprendre comment le sortir, alors prenez une note.

Le thème est "Y a-t-il NaN dans le DataFrame pandas?" Pour vérifier simplement si les données sont traitées correctement, je voudrais ** savoir s'il existe une valeur NaN dans le bloc de données et où elle se trouve **. Si vous voulez remplir / supprimer NaN, vous pouvez utiliser fillna () / dropna (), mais ce que vous voulez faire maintenant est ** "Vérifiez s'il y a NaN et affichez la ligne (colonne). **

Par exemple, je souhaite extraire uniquement les 2ème-4ème lignes ou 1-3ème colonnes de ce bloc de données.

Création de données


df=pd.DataFrame(np.random.randn(5,5))
df.ix[2:, 1:3] = np.nan
df.columns=list('abcde')
df
#[Out]#           a         b         c         d         e
#[Out]# 0 -0.678873 -1.277486 -1.062232  0.097525 -2.386115
#[Out]# 1 -1.063709 -1.919997 -0.131733 -0.606348  0.101888
#[Out]# 2 -1.701473       NaN       NaN       NaN  0.201468
#[Out]# 3 -0.624932       NaN       NaN       NaN -0.654297
#[Out]# 4  0.345065       NaN       NaN       NaN -0.232199

Sortie NaN comme valeur booléenne

Utilisez isnull () / notnull () pour voir s'il y a NaN. Référence ci-dessous

Comment gérer NaN by pandas official: documentation pandas 0.19.1 »Travailler avec des données manquantes

utilisez la méthode isnull

isnull()


df.isnull()
#[Out]#        a      b      c      d      e
#[Out]# 0  False  False  False  False  False
#[Out]# 1  False  False  False  False  False
#[Out]# 2  False   True   True   True  False
#[Out]# 3  False   True   True   True  False
#[Out]# 4  False   True   True   True  False

Ce qui est renvoyé est une trame de données de même taille que df et contenant une valeur booléenne. Vrai uniquement chez NaN.

notnull () est l'inverse de True / False de la trame de données retournée par isnull ()

C'est un peu différent de ce que je veux faire

Résumer s'il y a NaN dans la ligne (colonne)

Ce que je veux faire ** "Vérifier s'il y a NaN et afficher la ligne (colonne)" ** Une fois décomposé

Je me demande si ce sera le cas.

** Il y a plus d'un Honyalara ** En parlant de ** méthode ʻany` de numpy **

np.any()


df.isnull().any()
#[Out]# a    False
#[Out]# b     True
#[Out]# c     True
#[Out]# d     True
#[Out]# e    False
#[Out]# dtype: bool

df.isnull().any(axis=1)
#[Out]# 0    False
#[Out]# 1    False
#[Out]# 2     True
#[Out]# 3     True
#[Out]# 4     True
#[Out]# dtype: bool

df.isnull().any(axis=0)  # df.isnull().any()Pareil que
#[Out]# a    False
#[Out]# b     True
#[Out]# c     True
#[Out]# d     True
#[Out]# e    False
#[Out]# dtype: bool

Puisque la direction de balayage par défaut de «any ()» est la direction de ligne (axe = 0), «df.isnull (). Any ()» est une conversion par «True» (isnull (), c'est-à-dire «NaN») dans la colonne. Renvoie «True» si plus d'un est inclus / «False» sinon. Si vous en définissez un (axe = 1), la direction de balayage est modifiée et la direction de la colonne (axe = 1) est recherchée pour savoir si «True» (c'est-à-dire «NaN») est inclus.

ʻAxis = peut être omis, donc écrire df.isnull (). Any (1) ʻest identique à df.isnull (). Any (axis = 1).

Y a-t-il même un NaN dans la file d'attente?

C'est un peu différent de ce que je veux faire, et pour le faire ** retourner True s'il y a NaN en un seul endroit **, en chevaucher.

Contient-il même un NaN?


df.isnull().any().any()  #Contient NaN
#[Out]# True
dff=pd.DataFrame(np.random.randn(5,5))  #Ne contient pas de NaN
dff.isnull().any().any()
#[Out]# False

J'ai fait la même chose pour le débordement de pile. stack overflow - Python pandas: check if any value is NaN in DataFrame Outre df.any (). Any ()

Je l'utilise. Le temps le plus rapide mesuré par % timeit était df.isnull (). Values.any (). ** Si vous voulez savoir si même un NaN est inclus **, utilisez-le.

Extraire les lignes (colonnes) contenant NaN

Je peux enfin faire ce que je veux faire. Avec df.isnull (). Any (1), vous pouvez créer une valeur booléenne pour voir si la ligne contient NaN, la découper ** et extraire uniquement les colonnes contenant NaN.

Extraction de ligne avec NaN


df[df.isnull().any(1)]
#[Out]#           a   b   c   d         e
#[Out]# 2 -1.701473 NaN NaN NaN  0.201468
#[Out]# 3 -0.624932 NaN NaN NaN -0.654297
#[Out]# 4  0.345065 NaN NaN NaN -0.232199

Extraction de lignes avec NaN


df.ix[:,df.isnull().any()]
#[Out]#           b         c         d
#[Out]# 0 -1.277486 -1.062232  0.097525
#[Out]# 1 -1.919997 -0.131733 -0.606348
#[Out]# 2       NaN       NaN       NaN
#[Out]# 3       NaN       NaN       NaN
#[Out]# 4       NaN       NaN       NaN

c'est tout!

Il semble y avoir un moyen plus simple, mais n'est-ce pas? S'il vous plaît, faites-moi savoir. De plus, alors que l'extraction des seules lignes de pandas a loc, ʻiloc, l'extraction des colonnes est df. ʻou df.ix [:, <nom de colonne>]. Il y en a, mais ce n'est pas beau, il y a aussi un beau moyen (ligne loc, iloc et colonne appariée loc, iloc) (\ * ω \ *)

Mise à jour 2017/4/15 Extraire la troisième ligne avec df.icol (3) Extraire les 0ème et 2ème colonnes avec df.icol ([0,2]) Dans df.icol ([0: 2]), les 0ème, 1ère et 2ème colonnes ne sont ** pas extraites et d'erreur **


J'ai posté une comparaison de vitesse dans la section des commentaires.

Recommended Posts

Y a-t-il NaN dans le DataFrame pandas?
[Pandas] Si les données de la première ligne sont dans l'en-tête de DataFrame
Vérifiez si la colonne attendue existe dans Pandas DataFrame
Combinez des listes dans un DataFrame avec des pandas
Y a-t-il un spécial dans scipy? ??
Il n'y a pas de commutateur en python
Malheureusement, il n'y a pas de sens d'unité dans la méthode where
Parcourir .loc et .iloc en même temps dans pandas DataFrame
[Python] Qu'est-ce que la série pandas et DataFrame?
Obtenez les nièmes valeurs les plus importantes dans Pandas
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Comment réattribuer un index dans pandas dataframe
[Pandas] Développer les chaînes de caractères en DataFrame
La date n'est pas affichée correctement dans matplotlib.
[pandas] Lors de la spécification de l'étiquette d'index par défaut dans la méthode at, "" n'est pas requis
Pipfile n'est pas créé dans le répertoire courant
Qu'est-ce que wheezy dans l'image Docker Python?
Supprimer les lignes avec des valeurs arbitraires dans pandas DataFrame
À propos de la différence entre "==" et "is" en python
Déterminer s'il y a des oiseaux dans l'image
[Python] Trier la table par sort_values (pandas DataFrame)
Supprimer les lignes avec des index en double dans pandas DataFrame
Enregistrer Pandas DataFrame en tant que .csv.gz dans Amazon S3
N'y a-t-il pas une valeur par défaut dans le dictionnaire?
Vérifiez si la chaîne est un nombre en python
Ceci est un exemple d'application de fonction dans dataframe.
Lorsque l'objet sélectionné dans bpy.context.selected_objects n'est pas renvoyé
Linux est quelque chose comme ça en premier lieu
S'il n'y avait pas de conteneurs DI dans le monde.
VS Code indique qu'il y a une erreur dans cv2
Convertir des chaînes numériques séparées par des virgules en nombres dans Pandas DataFrame
Quel est l'attribut de domaine écrit dans la disposition de Plotly?
Vérifiez s'il s'agit d'Unix dans le langage de script
Remplissez les valeurs aberrantes avec NaN en fonction des quadrants dans Pandas
Trouvez la partie 575 de Wikipedia en Python
Déterminer si un attribut est défini dans l'objet
Vérifiez s'il s'agit d'Unix dans le langage de script
Apprenez les pandas en 10 minutes
Utiliser DataFrame en Java
Utiliser Mean avec DataFrame
Lors de la lecture d'une image avec SimpleITK, il y a un problème s'il y a du japonais dans le chemin
UnicodeDecodeError dans pandas read_csv
Application Python: Pandas # 3: Dataframe
Test.py n'est pas reflété sur le serveur Web dans Python3.
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
Vérifiez quelle ligne a causé l'erreur avec apply () (dataframe, Pandas)
Calculez le décalage horaire entre deux colonnes avec Pandas DataFrame
J'ai essayé de résumer le code souvent utilisé dans Pandas
Fonction pratique pour ajouter des colonnes n'importe où dans Pandas DataFrame
Obtenez automatiquement le port où Arduino est bloqué en Python
Découvrez combien de chaque caractère est dans la chaîne.
Récupère le nom de la classe où la méthode est définie dans le décorateur
Impossible de saisir le japonais dans l'application Flatpak? La cause est Fcitx.
La méthode minimale à retenir lors de l'agrégation de données avec Pandas
Y a-t-il un secret dans la fréquence des nombres de rapport de circonférence?
Dans la fusion via pull request, il n'y a pas d'informations de committer dans la réponse de l'API Github