Câu trả lời:
CẬP NHẬT: sử dụng Pandas 0.22.0
Các phiên bản Pandas mới hơn có các phương thức mới 'DataFrame.isna ()' và 'DataFrame.notna ()'
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
như danh sách các cột:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
để chọn các cột đó (chứa ít nhất một NaN
giá trị):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
Câu trả lời của OLD:
Hãy thử sử dụng isnull () :
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
hoặc như @root đề xuất phiên bản rõ ràng hơn:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
để chọn một tập hợp con - tất cả các cột chứa ít nhất một NaN
giá trị:
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
df.columns[df.isin['xxx'].any()].tolist()
df.columns[df.eq(search_for_value).any()].tolist()
isna
, notna
?
Tôi gặp vấn đề khi phải kiểm tra trực quan trên màn hình để có một danh sách ngắn comp lọc và trả về các cột vi phạm
nan_cols = [i for i in df.columns if df[i].isnull().any()]
nếu điều đó hữu ích cho bất cứ ai
Trong các bộ dữ liệu có số lượng cột lớn thậm chí còn tốt hơn để xem có bao nhiêu cột chứa giá trị null và bao nhiêu cột không.
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
Ví dụ: trong khung dữ liệu của tôi, nó chứa 82 cột, trong đó 19 cột chứa ít nhất một giá trị null.
Hơn nữa, bạn cũng có thể tự động xóa cols và hàng tùy theo đó có nhiều giá trị null hơn
Đây là mã thực hiện điều này một cách thông minh:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
Lưu ý: Mã trên loại bỏ tất cả các giá trị null của bạn. Nếu bạn muốn giá trị null, xử lý chúng trước.
Cả hai nên hoạt động:
df.isnull().sum()
df.isna().sum()
Các phương thức DataFrame isna()
hoặc isnull()
hoàn toàn giống nhau.
Lưu ý : Chuỗi rỗng ''
được coi là Sai (không được coi là NA)
Điều này làm việc cho tôi,
1. Để nhận Cột có ít nhất 1 giá trị null. (tên cột)
data.columns[data.isnull().any()]
2. Để nhận Cột có số đếm, có ít nhất 1 giá trị null.
data[data.columns[data.isnull().any()]].isnull().sum()
[Tùy chọn] 3. Để có được tỷ lệ phần trăm của số null.
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
df.isna().any()[lambda x: x]
làm việc cho tôi