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?

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

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


4

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

df.info()

yang memberikan jumlah nilai yang bukan nol untuk setiap kolom.


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)

0

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

(df.isnull().sum() > 0).astype(np.int64).sum()

-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

-1

Jika Anda ingin menghitung nilai yang hilang:

np.logical_not(df.isnull()).sum()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.