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.

3voto

avg Punkte 743

Es gibt einen schönen Dzone-Artikel vom Juli 2017, der verschiedene Möglichkeiten zur Zusammenfassung von NaN-Werten beschreibt. Überprüfen Sie es hierhier.

Der von mir zitierte Artikel bietet zusätzlichen Mehrwert durch: (1) Zeigt eine Möglichkeit, NaN-Zähler für jede Spalte zu zählen und anzuzeigen, damit man leicht entscheiden kann, ob diese Spalten verworfen werden sollen, und (2) Zeigt eine Möglichkeit, die Zeilen auszuwählen, die NaNs enthalten, so dass sie selektiv verworfen oder ergänzt werden können.

Hier ist ein schnelles Beispiel, um die Nützlichkeit des Ansatzes zu demonstrieren - mit nur wenigen Spalten ist sein Nutzen vielleicht nicht offensichtlich, aber ich fand es hilfreich für größere Datenrahmen.

import pandas as pd
import numpy as np

# Beispiel DataFrame
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})

# Überprüfen, ob es Nullwerte in den Spalten gibt
null_columns = df.columns[df.isnull().any()]
print(df[null_columns].isnull().sum())

# Man kann weiter dem zitierten Artikel folgen

2voto

AidinZadeh Punkte 638

Falls Sie die Nicht-NA (nicht None) und NA (None) Zählungen über verschiedene Gruppen benötigen, die durch groupby extrahiert werden:

gdf = df.groupby(['SpalteZurGruppierung'])

def countna(x):
    return (x.isna()).sum()

gdf.agg(['count', countna, 'size'])

Dies liefert die Anzahl der Nicht-NA, NA und Gesamtanzahl der Einträge pro Gruppe zurück.

1voto

Hoda Punkte 11

Sie können df.iteritems() verwenden, um über das Datenrahmen zu iterieren. Legen Sie eine Bedingung innerhalb einer for-Schleife fest, um den Prozentsatz der NaN-Werte für jede Spalte zu berechnen und löschen Sie diejenigen, die einen Wert von NaNs über Ihrem festgelegten Schwellenwert enthalten:

for col, val in df.iteritems():
    if (df[col].isnull().sum() / len(val) * 100) > 30:
        df.drop(columns=col, inplace=True)

1voto

Espoir Murhabazi Punkte 5296

Basierend auf der gegebenen Antwort und einigen Verbesserungen ist das mein Ansatz

def PercentageMissin(Dataset):
    """Diese Funktion gibt den Prozentsatz fehlender Werte in einem Datensatz zurück"""
    if isinstance(Dataset,pd.DataFrame):
        adict={} # Ein Dictionary, das Schlüssel Spaltennamen und Werte Prozentsatz der fehlenden Werte in den Spalten enthält
        for col in Dataset.columns:
            adict[col]=(np.count_nonzero(Dataset[col].isnull())*100)/len(Dataset[col])
        return pd.DataFrame(adict,index=['% fehlend'],columns=adict.keys())
    else:
        raise TypeError("Kann nur mit Pandas DataFrame verwendet werden")

1voto

TVC Punkte 47

Ich benutze diese Schleife, um fehlende Werte für jede Spalte zu zählen:

# Überprüfe fehlende Werte
import numpy as np, pandas as pd
for col in df:
      print(col +': '+ np.str(df[col].isna().sum()))

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