Bagaimana cara memeriksa apakah panda DataFrame kosong?

296

Bagaimana cara memeriksa apakah panda DataFramekosong? Dalam kasus saya, saya ingin mencetak beberapa pesan di terminal jika DataFramekosong.

Nilani Algiriyage
sumber
2
len () tidak berfungsi? Seharusnya mengembalikan 0 untuk kerangka data kosong.
VIKASH JAISWAL

Jawaban:

462

Anda dapat menggunakan atribut df.emptyuntuk memeriksa apakah itu kosong atau tidak:

if df.empty:
    print('DataFrame is empty!')

Sumber: Dokumentasi Pandas

aikid
sumber
3
Ini sepertinya memalukan, karena Anda perlu tahu bahwa df adalah pd.DataFrame. Saya ingin mengetahui motivasi untuk tidak menerapkan bool () di pd.DataFrame.
Kuantitas
17
@Quant - Dokumentasi membahas mengapa bool memunculkan kesalahan untuk dataframe di sini: tautan . "Haruskah itu benar karena tidak panjang nol? Salah karena ada nilai-nilai salah? Tidak jelas, jadi sebaliknya, panda menimbulkan ValueError"
Bij
56

Saya menggunakan lenfungsinya. Ini jauh lebih cepat daripada empty. len(df.index)bahkan lebih cepat.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4), columns=list('ABCD'))

def empty(df):
    return df.empty

def lenz(df):
    return len(df) == 0

def lenzi(df):
    return len(df.index) == 0

'''
%timeit empty(df)
%timeit lenz(df)
%timeit lenzi(df)

10000 loops, best of 3: 13.9 µs per loop
100000 loops, best of 3: 2.34 µs per loop
1000000 loops, best of 3: 695 ns per loop

len on index seems to be faster
'''
Nol
sumber
7
DataFrame dapat kosong karena len (df.index) == 0 atau len (df.columns) == juga.
Mark Horvath
9

Saya lebih suka menempuh rute panjang. Ini adalah cek yang saya ikuti untuk menghindari penggunaan klausa coba-kecuali -

  1. periksa apakah variabelnya bukan None
  2. kemudian periksa apakah ini merupakan dataframe dan
  3. pastikan tidak kosong

Di sini, DATAadalah variabel yang dicurigai -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
fixxxer
sumber
2
Ini adalah praktik yang berlebihan dan buruk jika diharapkan bahwa variabel akan menjadi DataFrame (yang merupakan implikasi OP) yang kosong atau memiliki baris. Jika itu bukan DF (atau jika tidak ada), pengecualian harus dilemparkan karena ada yang tidak beres di suatu tempat.
fgblomqvist
Dalam Python, try/exceptitu murah dan ifmahal. Python bukan Java atau C; di sini lebih mudah untuk meminta maaf daripada izin
Nick Marinakis
4

Tampaknya definisi kosong yang diterima di utas ini adalah kerangka data dengan nol baris saja. Tetapi ada perbedaan antara kerangka data kosong dengan nol baris dan nol kolom dan kerangka data kosong dengan nol baris dan setidaknya satu kolom . Dalam setiap kasus panjang indeks adalah 0 dan kosong = Benar seperti yang ditunjukkan di sini:

Contoh 1: kosongkan kerangka data dengan 0 baris dan 0 kolom

In [1]: import pandas as pd
        df1 = pd.DataFrame()
        df1
Out[1]: Empty DataFrame
        Columns: []
        Index: []

In [2]: len(df1.index)
Out[2]: 0

In [3]: df1.empty
Out[3]: True

Contoh 2: kosongkan kerangka data dengan 0 baris dan setidaknya 1 kolom

In [4]: df2 = pd.DataFrame({'AA' : [], 'BB' : []})
        df2
Out[4]: Empty DataFrame
        Columns: [AA, BB]
        Index: []

In [5]: len(df2.index)
Out[5]: 0

In [6]: df2.empty
Out[6]: True

Salah satu cara untuk membedakan antara kerangka data yang kosong header dan data atau hanya kosong data adalah dengan menguji panjang indeks kolom . Kerangka data yang dimuat pertama mengembalikan nol kolom, kerangka data kedua mengembalikan jumlah kolom kosong.

In [7]: len(df1.columns)
Out[7]: 0

In [8]: len(df2.columns)
Out[8]: 2
Sven Haile
sumber
-1
1) Jika DataFrame telah mendapatkan nilai Nan dan Non Null dan Anda ingin menemukan apakah DataFrame
kosong atau tidak maka coba kode ini.
2) kapan situasi ini bisa terjadi? 
Situasi ini terjadi ketika satu fungsi digunakan untuk memplot lebih dari satu DataFrame 
yang dilewatkan sebagai parameter. Dalam situasi seperti itu fungsi mencoba untuk merencanakan data secara merata 
ketika DataFrame kosong dan dengan demikian petak angka kosong !.
Masuk akal jika hanya menampilkan pesan 'DataFrame tidak memiliki data'.
3) mengapa? 
jika DataFrame kosong (yaitu tidak berisi data sama sekali. Ingat DataFrame dengan nilai Nan 
dianggap tidak kosong) maka diinginkan untuk tidak merencanakan tetapi menyampaikan pesan:
Misalkan kita memiliki dua DataFrames df1 dan df2.
Fungsi myfunc mengambil DataFrame (df1 dan df2 dalam kasus ini) dan mencetak pesan 
jika DataFrame kosong (alih-alih memplot):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

dan fungsinya:

def myfunc(df):
  if (df.count().sum())>0: ##count the total number of non Nan values.Equal to 0 if DataFrame is empty
     print('not empty')
     df.plot(kind='barh')
  else:
     display a message instead of plotting if it is empty
     print('empty')
Gul Saeed Khattak
sumber
Meskipun kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan berikan indikasi tentang batasan dan asumsi apa yang berlaku. Dari Ulasan
double-beep