Câu trả lời:
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
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
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.
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)
Đ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()
>>> 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