Jawaban:
PEMBARUAN: menggunakan Pandas 0.22.0
Versi Pandas yang lebih baru memiliki metode baru 'DataFrame.isna ()' dan '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
sebagai daftar kolom:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
untuk memilih kolom tersebut (mengandung setidaknya satu NaN
nilai):
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
Jawaban LAMA:
Coba gunakan 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
atau seperti @root usulkan versi yang lebih jelas:
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']
untuk memilih subset - semua kolom yang mengandung setidaknya satu NaN
nilai:
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
?
Saya mempunyai masalah di mana saya harus memeriksa banyak kolom secara visual di layar sehingga daftar pendek yang menyaring dan mengembalikan kolom yang menyinggung adalah
nan_cols = [i for i in df.columns if df[i].isnull().any()]
jika itu bermanfaat bagi siapa pun
Dalam kumpulan data yang memiliki jumlah kolom yang besar, lebih baik untuk melihat berapa banyak kolom yang berisi nilai nol dan berapa banyak yang tidak.
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))
Sebagai contoh dalam dataframe saya itu berisi 82 kolom, dimana 19 berisi setidaknya satu nilai nol.
Selanjutnya Anda juga dapat secara otomatis menghapus cols dan rows bergantung pada yang memiliki lebih banyak nilai null
Berikut adalah kode yang melakukan ini dengan cerdas:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
Catatan: Kode di atas menghapus semua nilai nol Anda. Jika Anda ingin nilai nol, proses sebelumnya.
Ini berhasil untuk saya,
1. Untuk mendapatkan Kolom yang memiliki setidaknya 1 nilai nol. (nama kolom)
data.columns[data.isnull().any()]
2. Untuk mendapatkan Kolom dengan jumlah, dengan memiliki setidaknya 1 nilai nol.
data[data.columns[data.isnull().any()]].isnull().sum()
[Opsional] 3. Untuk mendapatkan persentase jumlah nol.
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
df.isna().any()[lambda x: x]
bekerja untuk saya