Lors de la lecture d'un fichier csv ou excel, s'il y a une cellule vide, elle sera lue comme une valeur manquante (NaN).
Un résumé de la recherche, de la suppression et de la conversion d'une matrice contenant cette valeur manquante (NaN).
Contient des cellules sans valeurs entrées ou des matrices vides.
Lire le fichier csv
import pandas as pd
df = pd.read_csv('~/desktop/test.csv')
df
Voir ci-dessous pour plus de détails sur la lecture des fichiers csv avec python.
Comment lire le fichier csv Application de lecture de fichiers csv
-La cellule vide devient "NaN". -Les erreurs de formule "#REF!", "# DIV / 0!" Et "#NAME?" Ne sont pas reconnues comme des valeurs manquantes (comme elles l'étaient). ・ La première ligne est reconnue comme un en-tête
** 1-1. Cartographie de l'ensemble du tableau **
df.isna()
└ "df": données avec un tableau
Mapper la table entière
df.isna()
▼ Sortie
NaN est affiché comme "True" et d'autres sont affichés comme "False".
▼ Données d'origine
pd.isna (plage spécifiée)
└ "pd.isna ()": pd devient un objet
Mapper la colonne spécifiée
pd.isna(df['col1'])
#production
0 False
1 False
2 False
3 False
4 True
5 False
Name: col1, dtype: bool
Mapper la ligne spécifiée
pd.isna(df['col1'])
#production
0 False
1 False
2 False
3 False
4 True
5 False
Name: col1, dtype: bool
Mapper la ligne spécifiée
pd.isna(df.loc[[3]])
▽ Sortie
Mapper la ligne spécifiée
pd.isna(df[1:4])
▽ Sortie
Si vous mettez une valeur dans "()" de pd.isna ()
, il sera jugé si c'est NaN ou non.
⇒Saisissez l'élément de cellule.
Juge cellule (spécifiée par le nom de la matrice)
pd.isna(df.loc[0,'col4'])
#production
#True
Juge cellule (spécifiée par le nom de la matrice)
pd.isna(df.iloc[1,3])
#production
#True
Il existe différentes manières de spécifier la plage d'une table DataFrame. Cliquez ici pour plus de détails
Vrai si applicable. Faux si non applicable.
Que ce soit une ligne ou une colonne est commuté par la présence ou l'absence de l'option "axe = 1".
・ Df.isna (). All ()
: ** Colonne ** liste
・ Df.isna (). All (axis = 1)
: ** Ligne ** liste
Liste des colonnes
df.isna().all()
#production
col1 False
Unnamed: 1 False
col3 False
col4 True
Unnamed: 4 True
col6 False
dtype: bool
Les noms de colonne «col4» et «Sans nom: 4» sont vides.
Liste des lignes
df.isna().all(axis=1)
0 False
1 False
2 False
3 False
4 True
5 False
dtype: bool
Le nom de la ligne «4» est vide
Vrai si applicable. Faux si non applicable.
Que ce soit une ligne ou une colonne est commuté par la présence ou l'absence de l'option "axe = 1".
・ Df.isna (). Any ()
: ** Colonne ** liste
・ Df.isna (). Any (axis = 1)
: ** Ligne ** liste
Liste des colonnes
df.isna().any()
#production
col1 True
Unnamed: 1 True
col3 True
col4 True
Unnamed: 4 True
col6 True
dtype: bool
Toutes les colonnes contiennent NaN.
Liste des lignes
df.isna().any(axis=1)
0 True
1 True
2 True
3 True
4 True
5 True
dtype: bool
Toutes les lignes contiennent NaN.
Il peut être utilisé lorsque vous souhaitez voir l'état rapidement.
ʻAny () `renvoie True s'il y a au moins un True dans la liste, False sinon.
Vérifiez s'il y a au moins une colonne vide
df.isna().all().any()
#production
# True
S'il y a au moins une ** toutes les lignes vides ** dans le tableau, False est renvoyé s'il n'y a pas de True.
Vérifiez s'il y a au moins une ligne vierge
df.isna().all(axis=1).any()
#production
# True
Contient-il au moins un NaN?
df.isna().any().any()
#production
# True
Que ce soit une ligne ou une colonne est commuté par la présence ou l'absence de l'option "axe = 1".
・ Df.isna (). Sum ()
: Nombre de comptage par ** colonne **
・ Df.isna (). Sum (axis = 1)
: Nombre de comptage par ** ligne **
Comptez le NaN contenu dans chaque colonne
df.isna().sum()
#production
col1 1
Unnamed: 1 2
col3 1
col4 6
Unnamed: 4 6
col6 2
dtype: int64
Comptez le NaN contenu dans chaque ligne
df.isna().sum(axis=1)
#production
0 2
1 3
2 3
3 2
4 6
5 2
dtype: int64
De plus, en faisant sum ()
, le nombre de NaN dans chaque ligne est additionné.
Nombre de NaN dans la table entière
df.isna().sum().sum()
#production
# 18
len (df ['nom de la ligne'])
--count (df ['nom de la ligne'])
Recherchez le nombre de NaN dans la ligne ou la colonne spécifiée.
② count (df ['nom de la ligne'])
└ Nombre d'éléments autres que NaN contenus dans la ligne spécifiée
En définissant ①-②, le nombre de NaN contenus dans la ligne spécifiée est calculé.
Supplément
méthode de comptage: compte le nombre d'éléments autres que NaN
** ▼ Colonne cible (colonne contenant deux NaN. Nom de la colonne: col6) **
Colonne cible
df.col6
0 A
1 NaN
2 C
3 D
4 NaN
5 F
Nombre de NaN dans la ligne spécifiée
len(df['col6'])-df['col6'].count()
#production
# 2
option | Contenu |
---|---|
axis=0 | Ligne (facultatif) |
axis=1 | Colonne |
how='any' | Supprimer s'il y a même un NaN(Optionnel) |
how='all' | Supprimer si tout NaN |
thresh=n | Pas NaN(Valide)Ne pas supprimer s'il y a n cellules ou plus |
subset=['A',,] | Supprimer les lignes contenant NaN dans le nom de colonne spécifié (supprimer NaN du nom de colonne spécifié) |
subset=['a',,], axis=1 | Supprimer les colonnes contenant NaN dans le nom de ligne spécifié (supprimer NaN du nom de ligne spécifié) |
inplace=True | Autoriser l'écrasement |
① axe = 0 (omis) ②axis=1 ③dropna(how='all').dropna(how='all', axis=1)
dropna(how='all')
dropna(how='all', axis=0)
Supprimer toutes les lignes vides
df.dropna(how='all')
▽ Sortie
Ligne 4 supprimée.
②axis=1
dropna(how='all', axis=1)
Supprimez les "colonnes" qui contiennent des blancs.
Supprimer toutes les colonnes vides
df.dropna(how='all')
▽ Sortie
Suppression de deux colonnes, col4 et Sans nom: 4.
Suppression des lignes et des colonnes où tous les éléments sont vides.
Après avoir supprimé les lignes vides avec dropna (how = 'all')
Supprimez les colonnes vides avec dropna (how = 'all', axis = 1)
.
Supprimer les lignes et les colonnes vides
df.dropna(how='all').dropna(how='all', axis=1)
▽ Sortie
Ligne 4, colonne col4, Sans nom: 4 supprimés.
① Par défaut ②axis=1
Il y a quatre NaN. (Ligne, colonne) = (4,1), (5,2), (1,5), (4,5)
La valeur par défaut de la méthode dropna est que how = 'any'
est spécifié comme option.
dropna()
dropna(how='any')
dropna(how='any', axis=0)
Dans chaque cas, les lignes 1, 4, 5 et 6 incluant NaN ont été supprimées.
Puisque «how =» any »peut être omis, les deux processus suivants sont identiques.
dropna(axis=1)
dropna(how='any', axis=1)
Tous contiennent un ou plusieurs NaN, col1, Sans nom: 1, col5 supprimé.
①df.dropna(thresh=n) ②df.dropna(thresh=n, axis=1)
▽ Supplément thresh est une abréviation de "seuil".
・ Table 10 lignes x 6 colonnes -Le nombre de NaN est 1 dans la 0ème ligne (9 cellules ne le sont pas). Le nombre de NaN augmente d'une colonne à la fois. ・ Toutes les 4e colonnes sont vides
Lignes supprimées avec une ou moins de cellules autres que NaN. Identique à la suppression de toutes les lignes NaN.
** ▼ Lorsque seuil = 1 **
Spécifier un seuil (n)=1)
df.dropna(thresh=1)
Il n'y a pas de cellules NaN uniquement, donc toutes les lignes restent.
Spécifier un seuil (n)=4)
df.dropna(thresh=4)
Les lignes avec 4 cellules ou moins autres que NaN, les lignes 1, 2 et 3 sont supprimées.
Spécifier un seuil (n)=7)
df.dropna(thresh=7)
Comme il n'y a pas de lignes avec 7 cellules ou plus autres que NaN, supprimez tout.
Colonnes supprimées avec une ou moins de cellules autres que NaN. Identique à la suppression de toutes les colonnes NaN.
Spécifier un seuil (n)=1)
df.dropna(thresh=1, axis=1)
Toute la colonne NaN 4 supprimée.
Spécifier un seuil (n)=7)
df.dropna(thresh=7, axis=1)
Les colonnes avec 7 cellules ou moins autres que NaN, les lignes 4, 5 et 6 sont supprimées.
Spécifier un seuil (n)=11)
df.dropna(thresh=11, axis=1)
Puisqu'il n'y a pas de colonne avec 11 cellules ou plus autres que NaN, supprimez tout.
①df.dropna(subset=['AAA', 'BBB']) ②df.dropna(subset=['aaa', 'bbb'], axis=1)
・ 10 lignes x 6 colonnes ・ Le nom de la ligne est le numéro de ligne x ligne ・ Le nom de la colonne est col x numéro de colonne
①df.dropna(subset=['AAA', 'BBB']) Supprimez la ligne en spécifiant le nom de la colonne.
df.dropna(subset=['AAA', 'BBB'])
└ "df": variable avec table
└ "sous-ensemble": option pour spécifier le nom de la table ou de la colonne
└ "AAA" "BBB": nom de colonne (facultatif)
-La cible de suppression est une ligne ou une colonne est spécifiée par la présence ou l'absence d'axe.
Supprimer la ligne en spécifiant le nom de la colonne
df.dropna(subset=['col1','col3','col5'])
Lignes 1, 2, 3, 4, 5 supprimées. Les colonnes spécifiées col1,3,5 ne contiennent plus NaN.
Supprimez la colonne avec NaN dans les lignes 0 et 3. (NaN disparaît de la colonne spécifiée)
Supprimer la ligne en spécifiant le nom de la colonne
df.dropna(subset=['row0','row3'], axis=1)
Suppression des colonnes col3, col4, col5.
Ne pas écraser par défaut.
└inplace=False
Décrivez ce qui suit pour autoriser l'écrasement.
└**inplace=True
**
Écraser l'autorisation
df.dropna(thresh=5, inplace=True)
df
Pas d'écrasement
df.dropna(thresh=5)
df
Le tableau reste le même.
La méthode de remplacement et les conditions de NaN à remplacer sont spécifiées en option.
option | Contenu |
---|---|
axis=0 | Ligne (omise) |
axis=1 | Colonne |
value | Valeur à convertir NaN |
method='bfill' | Convertir en valeur dans la cellule inférieure de NaN |
method='backfill' | 'bfill'Pareil que |
method='ffill' | Convertir NaN en valeur dans la cellule supérieure |
method='pad' | 'ffill'Pareil que |
method='bfill', axis=1 | Convertir en valeur dans la cellule de droite de NaN |
method='ffill', axis=1 | Convertir en valeur dans la cellule gauche de NaN |
limit=n | Remplacez jusqu'au nième NaN. Ne remplacez plus. |
inplace=True | Autoriser l'écrasement |
** ② Spécifiez le nombre de NaN à remplacer ** 1-1. fillna('AAA', limit=n) 1-2. fillna('AAA', limit=n, axis=1) 1-3. fillna(method='ffill', limit=n) 1-4. fillna(method='ffill', limit=n, axis=1)
** ③ Autoriser l'écrasement **
fillna('AAA')
df.fillna('AAA')
** ▼ Exemple: lorsque vous spécifiez de remplacer par la valeur dans la cellule de droite **
Avant le remplacement: NaN NaN NaN AAA Après remplacement: AAA AAA AAA AAA
** Liste d'options de la méthode ▼ **
method | sens | Contenu |
---|---|---|
ffill | forward fill | Remplacez par la valeur de la première cellule (ligne: haut, colonne: gauche) |
pad | padding | Identique à ffill |
bfill | backward fill | Remplacez par la valeur dans la cellule arrière (ligne: bas, colonne: droite) |
backfill | backward fill | Identique à bfill |
Lorsque vous spécifiez une ligne, déterminez si elle est avant ou après en fonction du numéro de ligne. (Haut ou bas)
Lorsque vous spécifiez une colonne, déterminez si elle est recto ou verso en fonction du numéro de colonne. (Gauche ou droite)
Erreur
ValueError: Cannot specify both 'value' and 'method'.
Remplacez par la valeur de la ligne du haut.
ffill
df.fillna(method='ffill')
Convertissez en une valeur supérieure à NaN. Non remplacé si la rangée supérieure est NaN.
Remplacez par la valeur de la colonne avant.
ffill,axis=1
df.fillna(method='ffill', axis=1)
Remplacez par la valeur de la dernière ligne.
bfill
df.fillna(method='bfill')
Remplacez par la valeur de la colonne arrière.
bfill,axis=1
df.fillna(method='bfill', axis=1)
En utilisant l'option limit, vous pouvez spécifier le nombre de NaN à remplacer.
limit=n
Remplacez jusqu'au nième. Ne remplacez plus.
** Exemple: lorsque limit = 2, la valeur à remplacer AAA et l'axe est une colonne **
■ Avant le remplacement AAA NaN NaN AAA AAA AAA NaN NaN NaN AAA AAA NaN AAA NaN AAA NaN NaN AAA NaN NaN
■ Après remplacement AAA AAA AAA AAA AAA AAA AAA AAA NaN AAA AAA AAA AAA AAA AAA AAA AAA AAA NaN NaN
-Remplacez chaque ligne de la gauche au deuxième NaN.
À partir du haut de l'ordre des numéros de ligne, NaN remplace jusqu'à la seconde.
limit=2
df.fillna('AAA', limit=2)
Remplacez de haut en bas pour chaque colonne. Ne remplacez plus.
Remplacez du haut au troisième NaN dans l'ordre des numéros de ligne.
limit=3,axis=1
df.fillna('AAA', limit=3, axis=1)
Remplace jusqu'au troisième NaN dans l'ordre des numéros de ligne par la valeur précédente.
ffill,limit=3
df.fillna(method='ffill', limit=3)
Remplacez jusqu'au troisième NaN dans l'ordre des numéros de colonne par la valeur précédente.
ffill,limit=3,axis=1
df.fillna(method='ffill', limit=3)
Ne pas écraser par défaut.
└inplace=False
Décrivez ce qui suit pour autoriser l'écrasement.
└**inplace=True
**
Écraser l'autorisation
df.fillna('AAA', inplace=True)
df
Pas d'écrasement
df.fillna('AAA')
df
Le tableau reste le même.