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
, applymap
vv Đó 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