Bagaimana cara menghitung jumlah nilai yang hilang di setiap baris dalam bingkai data Pandas?

16

Bagaimana saya bisa mendapatkan jumlah nilai yang hilang di setiap baris dalam bingkai data Pandas. Saya ingin membagi dataframe ke berbagai dataframe yang memiliki jumlah nilai yang sama hilang di setiap baris.

Ada saran?

Kaggle
sumber

Jawaban:

19

Anda dapat menerapkan hitungan di atas baris seperti ini:

test_df.apply(lambda x: x.count(), axis=1)

test_df:

    A   B   C
0:  1   1   3
1:  2   nan nan
2:  nan nan nan

keluaran:

0:  3
1:  1
2:  0

Anda dapat menambahkan hasilnya sebagai kolom seperti ini:

test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)

Hasil:

    A   B   C   full_count
0:  1   1   3   3
1:  2   nan nan 1
2:  nan nan nan 0
Jan van der Vegt
sumber
Bekerja dengan sempurna! Terima kasih.
Kaggle
39

Bila menggunakan panda, mencoba untuk menghindari operasi tampil di loop, termasuk apply, map, applymapdll Itu lambat!

Jika Anda ingin menghitung nilai yang hilang di setiap kolom, coba:

df.isnull().sum() atau df.isnull().sum(axis=0)

Di sisi lain, Anda dapat menghitung di setiap baris (yang merupakan pertanyaan Anda) dengan:

df.isnull().sum(axis=1)

Ini kira-kira 10 kali lebih cepat daripada solusi Jan van der Vegt (BTW ia menghitung nilai yang valid, bukan nilai yang hilang):

In [18]: %timeit -n 1000 df.apply(lambda x: x.count(), axis=1)
1000 loops, best of 3: 3.31 ms per loop

In [19]: %timeit -n 1000 df.isnull().sum(axis=1)
1000 loops, best of 3: 329 µs per loop
Icyblade
sumber
5

Cara penyederhanaan:

df.isnull().sum(axis=1)
Yuan JI
sumber
4

Atau, Anda bisa memanfaatkan metode info untuk objek bingkai data:

df.info()

yang memberikan jumlah nilai yang bukan nol untuk setiap kolom.

Chris Ivan
sumber
2

nilai nol di sepanjang kolom,

df.isnull().sum(axis=0)

nilai kosong di sepanjang kolom,

c = (df == '').sum(axis=0)

nilai nol di sepanjang baris,

df.isnull().sum(axis=1)

nilai kosong di sepanjang baris,

c = (df == '').sum(axis=1)
Rakesh Chaudhari
sumber
0

Cuplikan ini akan mengembalikan nilai integer dari total jumlah kolom dengan nilai yang hilang:

(df.isnull().sum() > 0).astype(np.int64).sum()
Neil Armstrong
sumber
-1
>>> df = pd.DataFrame([[1, 2, np.nan],
...                    [np.nan, 3, 4],
...                    [1, 2,      3]])

>>> df
    0  1   2
0   1  2 NaN
1 NaN  3   4
2   1  2   3

>>> df.count(axis=1)
0    2
1    2
2    3
dtype: int64
K3 --- rnc
sumber
-1

Jika Anda ingin menghitung nilai yang hilang:

np.logical_not(df.isnull()).sum()
Itachi
sumber