web-dev-qa-db-ja.com

pandas DataFrame?

pandas DataFrame?のnan値(数ではない)を考慮する最良の方法は何ですか?

次のコード:

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())

出力:

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

望ましい出力は次のとおりです。

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

私はpandas 0.17 with Python 3.5.0 with Anaconda 2.4.0。

16
SpeedCoder5

DataFrame dfの列_'a'_のNaN値のみをカウントする場合は、次を使用します。

_len(df) - df['a'].count()
_

ここでcount()はNaN以外の値の数を示し、これは値の総数から差し引かれます(len(df)で与えられます)。

everydfの列のNaN値をカウントするには、次を使用します。

_len(df) - df.count()
_

_value_counts_を使用する場合は、notに_dropna=False_( .14.1 で追加)を設定してNaN値をドロップするよう指示します。

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

これにより、列の欠損値もカウントできます。

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

コードの残りの部分は期待どおりに動作するはずです(sumを呼び出す必要はないことに注意してください; print("nan: %d" % dfv[np.nan])で十分です)。

15
Alex Riley

Null値のみをカウントするには、 isnull() を使用できます。

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

Out[11]:
a    2
dtype: int64

ここで、aは列名であり、列にNULL値が2回出現しています。

22
ilyas patanam

データフレームのすべての列にあるすべてのNaNをカウントするきれいな方法は...

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())

単一の合計を使用して、各列のNaNのカウントを取得します。 2番目の合計は、それらの列の合計を合計します。

1
Thom Ives

all dfのnansをカウントするさらに別の方法:

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

タイミング:

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()')

プリント:

3.998805362999999
3.7503365439999996
3.689461442999999

ほぼ同等

1
Mr_and_Mrs_D

次のコードを使用して各列のnull値の概要のみが必要な場合df.isnull().sum()次のコードを使用してデータフレーム内のnull値の数を知りたい場合df.isnull().sum().sum() # calculate total

0
shuishoudage