807 Stimmen

Wie zähle ich die NaN-Werte in einer Spalte im Pandas DataFrame?

Ich möchte die Anzahl der NaN-Werte in jeder Spalte meiner Daten finden.

17voto

Suhas_Pote Punkte 2999
import numpy as np
import pandas as pd

rohdaten = {'Vorname': ['Jason', np.nan, 'Tina', 'Jake', 'Amy'], 
        'Nachname': ['Miller', np.nan, np.nan, 'Milner', 'Cooze'], 
        'Alter': [22, np.nan, 23, 24, 25], 
        'Geschlecht': ['m', np.nan, 'f', 'm', 'f'], 
        'Prüfung1_Ergebnis': [4, np.nan, 0, 0, 0],
        'Prüfung2_Ergebnis': [25, np.nan, np.nan, 0, 0]}
ergebnisse = pd.DataFrame(rohdaten, columns = ['Vorname', 'Nachname', 'Alter', 'Geschlecht', 'Prüfung1_Ergebnis', 'Prüfung2_Ergebnis'])

ergebnisse 
'''
  Vorname Nachname  Alter Geschlecht  Prüfung1_Ergebnis  Prüfung2_Ergebnis
0   Jason   Miller  22.0         m               4.0              25.0
1     NaN      NaN   NaN       NaN               NaN               NaN
2    Tina      NaN  23.0         f               0.0               NaN
3    Jake   Milner  24.0         m               0.0               0.0
4     Amy    Cooze  25.0         f               0.0               0.0
'''

Sie können folgende Funktion verwenden, die Ihnen die Ausgabe im Dataframe liefert

  • Nullwerte
  • Fehlende Werte
  • % der Gesamtwerte
  • Gesamtzahl der Null- und fehlenden Werte
  • % des Gesamtwerts an Null- und fehlenden Werten
  • Datentyp

Kopieren und fügen Sie einfach die folgende Funktion ein und rufen Sie sie auf, indem Sie Ihr pandas Dataframe übergeben

def missing_zero_values_table(df):
        zero_val = (df == 0.00).astype(int).sum(axis=0)
        mis_val = df.isnull().sum()
        mis_val_percent = 100 * df.isnull().sum() / len(df)
        mz_table = pd.concat([zero_val, mis_val, mis_val_percent], axis=1)
        mz_table = mz_table.rename(
        columns = {0 : 'Nullwerte', 1 : 'Fehlende Werte', 2 : '% der Gesamtwerte'})
        mz_table['Gesamtanzahl der Null- und fehlenden Werte'] = mz_table['Nullwerte'] + mz_table['Fehlende Werte']
        mz_table['% des Gesamtwerts an Null- und fehlenden Werten'] = 100 * mz_table['Gesamtanzahl der Null- und fehlenden Werte'] / len(df)
        mz_table['Datentyp'] = df.dtypes
        mz_table = mz_table[
            mz_table.iloc[:,1] != 0].sort_values(
        '% der Gesamtwerte', ascending=False).round(1)
        print ("Ihr ausgewähltes DataFrame hat " + str(df.shape[1]) + " Spalten und " + str(df.shape[0]) + " Zeilen.\n"      
            "Es gibt " + str(mz_table.shape[0]) +
              " Spalten, die fehlende Werte enthalten.")
#         mz_table.to_excel('D:/sampledata/missing_and_zero_values.xlsx', freeze_panes=(1,0), index = False)
        return mz_table

missing_zero_values_table(ergebnisse)

Ausgabe

Ihr ausgewähltes DataFrame hat 6 Spalten und 5 Zeilen.
Es gibt 6 Spalten, die fehlende Werte enthalten.

                 Nullwerte  Fehlende Werte  % der Gesamtwerte  Gesamtanzahl der Null- und fehlenden Werte  % des Gesamtwerts an Null- und fehlenden Werten Datentyp
Nachname                  0               2               40.0                                           2                                                40.0      object
Prüfung2_Ergebnis          2               2               40.0                                           4                                                80.0     float64
Vorname                   0               1               20.0                                           1                                                20.0      object
Alter                      0               1               20.0                                           1                                                20.0     float64
Geschlecht                 0               1               20.0                                           1                                                20.0      object
Prüfung1_Ergebnis          3               1               20.0                                           4                                                80.0     float64

Wenn es Ihnen zu kompliziert ist, dann können Sie folgende Funktion verwenden, um die fehlenden Werte in % zu erhalten

def missing(dff):
    print (round((dff.isnull().sum() * 100/ len(dff)),2).sort_values(ascending=False))

missing(ergebnisse)
'''
Prüfung2_Ergebnis    40.0
Nachname              40.0
Prüfung1_Ergebnis     20.0
Geschlecht            20.0
Alter                 20.0
Vorname               20.0
dtype: float64
'''

16voto

Anurag Bhakuni Punkte 2281

Bitte verwenden Sie die folgenden für eine bestimmte Spaltenanzahl

dataframe.columnName.isnull().sum()

15voto

Pygirl Punkte 11724

Um Nullen zu zählen:

df[df == 0].count(axis=0)

Um NaN zu zählen:

df.isnull().sum()

oder

df.isna().sum()

14voto

abdul Punkte 496

Hoffe, das hilft,

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan],'c':[np.nan,2,np.nan], 'd':[np.nan,np.nan,np.nan]})

enter image description here

df.isnull().sum()/len(df) * 100

enter image description here

Thres = 40
(df.isnull().sum()/len(df) * 100 ) < Thres

enter image description here

11voto

Itachi Punkte 2283

Sie können die value_counts Methode verwenden und die Werte von np.nan ausdrucken

s.value_counts(dropna = False)[np.nan]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X