Làm cách nào để đếm số lượng giá trị còn thiếu trong mỗi hàng trong khung dữ liệu Pandas?


16

Làm cách nào tôi có thể nhận được số lượng giá trị còn thiếu trong mỗi hàng trong khung dữ liệu Pandas. Tôi muốn phân chia khung dữ liệu thành các tệp dữ liệu khác nhau có cùng số lượng giá trị bị thiếu trong mỗi hàng.

Bất kì lời đề nghị nào?

Câu trả lời:


19

Bạn có thể áp dụng số đếm trên các hàng như thế này:

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

kiểm tra_df:

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

đầu ra:

0:  3
1:  1
2:  0

Bạn có thể thêm kết quả dưới dạng một cột như thế này:

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

Kết quả:

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

Làm việc hoàn hảo! Cám ơn.
Kaggle

39

Khi sử dụng gấu trúc, cố gắng tránh các hoạt động thực hiện trong vòng một, bao gồm apply, map, applymapvv Đó là chậm!

Nếu bạn muốn đếm các giá trị còn thiếu trong mỗi cột, hãy thử:

df.isnull().sum() hoặc là df.isnull().sum(axis=0)

Mặt khác, bạn có thể đếm trong mỗi hàng (đó là câu hỏi của bạn) bằng cách:

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

Nó nhanh hơn khoảng 10 lần so với giải pháp của Jan van der Vegt (BTW anh ta đếm các giá trị hợp lệ, thay vì các giá trị bị thiếu):

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

Hoặc, bạn chỉ có thể sử dụng phương thức thông tin cho các đối tượng khung dữ liệu:

df.info()

cung cấp số lượng giá trị khác không cho mỗi cột.


2

giá trị null dọc theo cột,

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

giá trị trống dọc theo cột,

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

giá trị null dọc theo hàng,

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

các giá trị trống dọc theo hàng,

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

0

Đoạn mã này sẽ trả về giá trị nguyên của tổng số cột có giá trị bị thiếu:

(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

Nếu bạn muốn đếm số giá trị còn thiếu:

np.logical_not(df.isnull()).sum()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.