Di Python Pandas, apa cara terbaik untuk memeriksa apakah DataFrame memiliki satu (atau lebih) nilai NaN?
Saya tahu tentang fungsinya pd.isnan
, tetapi ini mengembalikan DataFrame dari booleans untuk setiap elemen. Posting ini di sini juga tidak menjawab pertanyaan saya.
Jawaban:
Tanggapan jwilner tepat. Saya sedang mengeksplorasi untuk melihat apakah ada opsi yang lebih cepat, karena dalam pengalaman saya, menjumlahkan array datar (anehnya) lebih cepat daripada menghitung. Kode ini tampaknya lebih cepat:
Sebagai contoh:
df.isnull().sum().sum()
sedikit lebih lambat, tetapi tentu saja, memiliki informasi tambahan - jumlahnyaNaNs
.sumber
pandas
tidak memiliki fungsi bawaan untuk ini. Memang benar dari pos @ JGreenwell yangdf.describe()
dapat melakukan ini, tetapi tidak ada fungsi langsung.df.describe()
(tanpa menemukanNaN
). Dengan array 1000 x 1000, satu panggilan membutuhkan waktu 1,15 detik.df.isnull().values.sum()
sedikit lebih cepat daridf.isnull().values.flatten().sum()
.flatten()
postering. Terima kasih.df.isnull().values.any()
, bagi saya itu lebih cepat daripada yang lain.Anda memiliki dua pilihan.
Sekarang bingkai data terlihat seperti ini:
df.isnull().any().any()
- Ini mengembalikan nilai booleanAnda tahu
isnull()
yang akan mengembalikan bingkai data seperti ini:Jika berhasil
df.isnull().any()
, Anda dapat menemukan kolom yang memilikiNaN
nilai:Satu lagi
.any()
akan memberi tahu Anda jika ada di atasTrue
df.isnull().sum().sum()
- Ini mengembalikan bilangan bulat dari jumlah totalNaN
nilai:Ini beroperasi dengan cara yang sama seperti yang
.any().any()
dilakukan, dengan terlebih dahulu memberikan penjumlahan dari jumlahNaN
nilai dalam kolom, kemudian penjumlahan dari nilai-nilai tersebut:Akhirnya, untuk mendapatkan jumlah total nilai NaN di DataFrame:
sumber
.any(axis=None)
bukan.any().any()
?Untuk mengetahui baris mana yang memiliki NaN di kolom tertentu:
sumber
non_nan_rows = df[df['name column'].notnull()]
.Jika Anda perlu tahu ada berapa baris dengan "satu atau lebih
NaN
s":Atau jika Anda perlu menarik baris ini dan memeriksanya:
sumber
df.isnull().any().any()
harus melakukannya.sumber
Menambahkan ke Hobs jawaban yang brilian, saya sangat baru untuk Python dan Panda jadi tolong tunjukkan jika saya salah.
Untuk mengetahui baris mana yang memiliki NaN:
akan melakukan operasi yang sama tanpa perlu transposing dengan menentukan sumbu dari setiap () sebagai 1 untuk memeriksa apakah 'Benar' hadir dalam baris.
sumber
any(axis=1)
penyederhanaan singkat Anda .Sintaks Super Sederhana:
df.isna().any(axis=None)
Mulai dari v0.23.2 , Anda dapat menggunakan
DataFrame.isna
+ diDataFrame.any(axis=None)
manaaxis=None
menentukan pengurangan logis atas seluruh DataFrame.Alternatif yang Berguna
numpy.isnan
Opsi pemain lain jika Anda menjalankan versi panda yang lebih lama.
Atau, periksa jumlahnya:
Series.hasnans
Anda juga bisa menelepon berulang
Series.hasnans
. Misalnya, untuk memeriksa apakah satu kolom memiliki NaN,Dan untuk memeriksa apakah ada kolom yang memiliki NaN, Anda dapat menggunakan pemahaman dengan
any
(yang merupakan operasi hubungan arus pendek).Ini sebenarnya sangat cepat.
sumber
Karena tidak ada yang disebutkan, hanya ada variabel lain yang disebut
hasnans
.df[i].hasnans
akan menghasilkanTrue
jika satu atau lebih nilai dalam Seri panda adalah NaN,False
jika tidak. Perhatikan bahwa ini bukan fungsi.versi panda '0.19.2' dan '0.20.2'
sumber
df = DataFrame([1,None], columns=['foo'])
, makadf.hasnans
akan melemparAttributeError
, tetapidf.foo.hasnans
akan kembaliTrue
.Karena
pandas
harus menemukan iniDataFrame.dropna()
, saya melihat untuk melihat bagaimana mereka menerapkannya dan menemukan bahwa mereka memanfaatkanDataFrame.count()
, yang menghitung semua nilai-nilai non-nol diDataFrame
. Lih kode sumber panda . Saya belum membandingkan teknik ini, tetapi saya pikir penulis perpustakaan cenderung telah membuat pilihan bijak untuk melakukannya.sumber
biarkan
df
menjadi nama DataFrame Pandas dan nilai apa pun yang merupakannumpy.nan
nilai nol.Jika Anda ingin melihat persentase nol di setiap kolom
df.loc[:,list(df.loc[:,df.isnull().any()].columns)].isnull().sum()/(len(df))*100
EDIT 1:
Jika Anda ingin melihat di mana data Anda hilang secara visual:
sumber
df.isna().sum()
?Hanya menggunakan math.isnan (x) , Return True jika x adalah NaN (bukan angka), dan False sebaliknya.
sumber
math.isnan(x)
akan bekerja ketikax
DataFrame. Anda mendapatkan TypeError sebagai gantinya.Ini akan memberi Anda jumlah semua nilai NaN yang ada di masing-masing kolom DataFrame.
sumber
Berikut adalah cara lain yang menarik untuk menemukan null dan mengganti dengan nilai yang dihitung
sumber
Saya telah menggunakan berikut ini dan ketik casting ke string dan memeriksa nilai nan
Ini memungkinkan saya untuk memeriksa nilai spesifik dalam suatu seri dan tidak hanya kembali jika ini terdapat di suatu tempat dalam seri.
sumber
pandas.isna()
?Yang terbaik adalah menggunakan:
Inilah sebabnya . Jadi
isna()
digunakan untuk mendefinisikanisnull()
, tetapi keduanya identik tentu saja.Ini bahkan lebih cepat daripada jawaban yang diterima dan mencakup semua array panda 2D.
sumber
Atau Anda dapat menggunakannya
.info()
padaDF
:df.info(null_counts=True)
yang mengembalikan jumlah baris non_null dalam kolom seperti:sumber
sumber
Akan memeriksa setiap kolom apakah itu mengandung Nan atau tidak.
sumber
Kita bisa melihat nilai-nilai null hadir dalam dataset dengan menghasilkan heatmap menggunakan Seaborn modul heatmap
sumber
Anda tidak hanya dapat memeriksa apakah ada 'NaN' tetapi juga mendapatkan persentase 'NaN di setiap kolom menggunakan yang berikut,
sumber
Bergantung pada jenis data yang Anda hadapi, Anda juga bisa mendapatkan jumlah nilai setiap kolom saat melakukan EDA dengan menetapkan dropna ke False.
Berfungsi dengan baik untuk variabel kategori, tidak begitu banyak ketika Anda memiliki banyak nilai unik.
sumber