Ich möchte die Anzahl der NaN
-Werte in jeder Spalte meiner Daten finden.
Antworten
Zu viele Anzeigen?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
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.
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)
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")