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.

0voto

rubengavidia0x Punkte 283

Ein weiterer Weg nur zur Vollständigkeit ist die Verwendung von np.count_nonzero mit .isna():

np.count_nonzero(df.isna())

%timeit np.count_nonzero(df.isna())
512 ms ± 24.7 ms pro Durchlauf (mean ± std. dev. von 7 Durchläufen, 1 loop each)

Vergleich mit den Top-Antworten bei Verwendung eines Dataframes mit 1000005 Zeilen × 16 Spalten:

%timeit df.isna().sum()
492 ms ± 55.2 ms pro Durchlauf (mean ± std. dev. von 7 Durchläufen, 1 loop each)

%timeit df.isnull().sum(axis = 0)
478 ms ± 34.9 ms pro Durchlauf (mean ± std. dev. von 7 Durchläufen, 1 loop each)

%timeit count_nan = len(df) - df.count()
484 ms ± 47.4 ms pro Durchlauf (mean ± std. dev. von 7 Durchläufen, 1 loop each)

Daten:

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'], 
        'Test1_Ergebnis': [4, np.nan, 0, 0, 0],
        'Test2_Ergebnis': [25, np.nan, np.nan, 0, 0]}
ergebnisse = pd.DataFrame(rohdaten, columns = ['Vorname', 'Nachname', 'Alter', 'Geschlecht', 'Test1_Ergebnis', 'Test2_Ergebnis'])

# großer Dataframe für %timeit 
groß_df = pd.DataFrame(np.random.randint(0, 100, size=(1000000, 10)), columns=list('ABCDEFGHIJ'))
df = pd.concat([groß_df,ergebnisse]) # 1000005 Zeilen × 16 Spalten

0voto

Rony Armon Punkte 158

Ich habe eine kurze Funktion (Python 3) geschrieben, um .info als ein Pandas-Dataframe zu erstellen, das dann in Excel geschrieben werden kann:

df1 = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]}) 
def info_as_df (df):
    null_counts = df.isna().sum()
    info_df = pd.DataFrame(list(zip(null_counts.index,null_counts.values))\
                                         , columns = ['Spalte', 'Nullwerte_Zähler'])
    data_types = df.dtypes
    info_df['Datentyp'] = data_types.values
    return info_df
print(df1.info())
print(info_as_df(df1))

Das ergibt:

RangeIndex: 3 Einträge, 0 bis 2
Data columns (total 2 columns):
 #   Spalte  Non-Null Count  Datentyp  
---  ------  --------------  -----  
 0      a       2 non-null      float64
 1      b       1 non-null      float64
dtypes: float64(2)
memory usage: 176.0 bytes
None
  Spalte  Nullwerte_Zähler    Datentyp
0      a                1      float64
1      b                2      float64

0voto

vsdaking Punkte 476

Ich habe die von @sushmit vorgeschlagene Lösung in meinem Code verwendet.

Eine mögliche Variation davon könnte auch sein

colNullCnt = []
for z in range(len(df1.cols)):
    colNullCnt.append([df1.cols[z], sum(pd.isnull(trainPd[df1.cols[z]]))])

Der Vorteil davon ist, dass es das Ergebnis für jede der Spalten im df zurückgibt.

0voto

John R Punkte 461

Angenommen, Sie möchten die Anzahl der fehlenden Werte (NaN) in einer Spalte (Serie) namens Preis in einem Datenrahmen namens Bewertungen erhalten

#das Datenrahmen importieren
import pandas as pd

reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)

Um die fehlenden Werte zu erhalten, mit n_missing_prices als Variable, einfach tun

n_missing_prices = sum(reviews.price.isnull())
print(n_missing_prices)

sum ist die Schlüsselmethode hier, ich habe versucht, count zu verwenden, bevor ich bemerkt habe, dass sum die richtige Methode in diesem Kontext ist

0voto

Arjaan Buijk Punkte 1121
import pandas as pd
import numpy as np

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

# Anzahl der NaNs in einer Spalte zählen
num_nan_a = df.loc[ (pd.isna(df['a'])) , 'a' ].shape[0]
num_nan_b = df.loc[ (pd.isna(df['b'])) , 'b' ].shape[0]

# Zusammenfassung der num_nan_b
print(df)
print(' ')
print(f"Es gibt {num_nan_a} NaNs in der Spalte a")
print(f"Es gibt {num_nan_b} NaNs in der Spalte b")

Gibt als Ausgabe folgendes:

     a    b
0  1.0  NaN
1  2.0  1.0
2  NaN  NaN

Es gibt 1 NaNs in der Spalte a
Es gibt 2 NaNs in der Spalte b

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