wake-up-neo.com

Wie zählt man nan-Werte in einem Pandas DataFrame?

Was ist der beste Weg, um Nan-Werte in einem Pandas-DataFrame (keine Anzahl) zu berücksichtigen?

Der folgende Code:

import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())

Ausgänge:

nan: 0
1: 1
3: 3
total: 4

Während die gewünschte Ausgabe ist:

nan: 2
1: 1
3: 3
total: 6

Ich verwende Pandas 0.17 mit Python 3.5.0 mit Anaconda 2.4.0.

11
SpeedCoder5

Wenn Sie nur NaN-Werte in der Spalte 'a' eines DataFrame df zählen möchten, verwenden Sie:

len(df) - df['a'].count()

Hier gibt count() die Anzahl der Nicht-NaN-Werte an, und diese wird von der Gesamtzahl der Werte (angegeben durch len(df)) abgezogen.

Um die NaN-Werte in der every -Spalte von df zu zählen, verwenden Sie:

len(df) - df.count()

Wenn Sie value_counts verwenden möchten, teilen Sie es not mit, um NaN-Werte zu löschen, indem Sie dropna=False (hinzugefügt in 0.14.1 ) einstellen:

dfv = dfd['a'].value_counts(dropna=False)

Dadurch können auch die fehlenden Werte in der Spalte gezählt werden:

 3     3
NaN    2
 1     1
Name: a, dtype: int64

Der Rest Ihres Codes sollte dann wie erwartet funktionieren (beachten Sie, dass es nicht notwendig ist, sum aufzurufen; es genügt nur print("nan: %d" % dfv[np.nan]).).

8
Alex Riley

Um nur Nullwerte zu zählen, können Sie isnull() verwenden: 

In [11]:
dfd.isnull().sum()

Out[11]:
a    2
dtype: int64

Hier ist a der Spaltenname und es gibt zwei Vorkommen des Nullwerts in der Spalte.

19
ilyas patanam

Eine gute Möglichkeit, alle NaNs in allen Spalten Ihres Datenrahmens zu zählen, wäre ...

import pandas as pd 
import numpy as np


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

Mit einer einzelnen Summe erhalten Sie die Anzahl der NaNs für jede Spalte. Die zweite Summe summiert diese Spaltensummen.

1
Thom Ives

Noch eine andere Möglichkeit, alle die Nans in einem df zu zählen:

num_nans = df.size - df.count().sum()

Timings:

import timeit

import numpy as np
import pandas as pd

df_scale = 100000
df = pd.DataFrame(
    [[1, np.nan, 100, 63], [2, np.nan, 101, 63], [2, 12, 102, 63],
     [2, 14, 102, 63], [2, 14, 102, 64], [1, np.nan, 200, 63]] * df_scale,
    columns=['group', 'value', 'value2', 'dummy'])

repeat = 3
numbers = 100

setup = """import pandas as pd
from __main__ import df
"""

def timer(statement, _setup=None):
    print (min(
        timeit.Timer(statement, setup=_setup or setup).repeat(
            repeat, numbers)))

timer('df.size - df.count().sum()')
timer('df.isna().sum().sum()')
timer('df.isnull().sum().sum()')

druckt:

3.998805362999999
3.7503365439999996
3.689461442999999

so ziemlich gleichwertig

1
Mr_and_Mrs_D

wenn Sie nur die Zusammenfassung des Nullwerts für jede Spalte wünschen, verwenden Sie den folgenden Code df.isnull().sum(), wenn Sie wissen möchten, wie viele Nullwerte im Datenrahmen mit dem folgenden Code df.isnull().sum().sum() # calculate total vorhanden sind.

0
shuishoudage