Panda DataFrame'in boş olup olmadığı nasıl kontrol edilir?


297

Pandaların DataFrameboş olup olmadığı nasıl kontrol edilir? Benim durumumda DataFrameboşsa terminalde bir mesaj yazdırmak istiyorum .


2
len () çalışmıyor? Boş veri çerçevesi için 0 döndürmelidir.
VIKASH JAISWAL

Yanıtlar:


463

df.emptyBoş olup olmadığını kontrol etmek için özelliği kullanabilirsiniz :

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

Kaynak: Pandalar Belgeleri


3
Bu bir utanç gibi görünüyor, çünkü df'nin bir pd.DataFrame olduğunu bilmeniz gerekir. Pd.DataFrame üzerinde bool () uygulamama motivasyonunu bilmek istiyorum.
Quant

17
- @Quant dokümantasyon neden üzerine bir tartışma vardır bool : burada dataframe için bir hata tutarsa bağlantı . Alıntı: "?? Yanlış değerler vardır çünkü Yanlış sıfır uzunluklu değil çünkü gerçek olmalı O pandalar bir ValueError yükseltir, bunun yerine, belli değil"
Bij

56

Kullandığım lenfonksiyonu. Bundan çok daha hızlı empty. len(df.index)daha da hızlı.

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
'''

7
Bir DataFrame, len (df.index) == 0 veya len (df.columns) == 0 nedeniyle boş olabilir.
Mark Horvath

9

Uzun rotaya gitmeyi tercih ederim. Bunlar, bir dene-hariç yan tümcesi kullanmaktan kaçınmak için izlediğim denetimlerdir -

  1. değişkenin Yok olup olmadığını kontrol edin
  2. sonra bir veri çerçevesi olup olmadığını kontrol edin ve
  3. boş olmadığından emin ol

İşte, DATAşüpheli değişken -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty

2
Değişkenin boş veya satır içeren bir DataFrame (OP'nin ima ettiği şey) olması bekleniyorsa, bu gereksiz ve kötü bir uygulamadır. Eğer bir DF değilse (ya da hiç değilse), bir yerlerde bir şeyler ters gittiğinden bir istisna atılmalıdır.
fgblomqvist

Python, try/exceptucuz ve ifpahalıdır. Python ne Java ne de C'dir; Burada Bağışlama İzninden Daha Kolay
Sorulur

4

Bu iş parçacığındaki boş tanımının yalnızca sıfır satırlı bir veri çerçevesi olduğu anlaşılıyor. Fakat arasında bir ayrım vardır sıfır satır ve sıfır sütunlu boş dataframe ve sıfır satır ve en az bir kolon ile boş dataframe . Her durumda, dizinin uzunluğu 0'dır ve burada gösterildiği gibi boş = Doğru:

Örnek 1: 0 satır ve 0 sütun içeren boş veri çerçevesi

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

Örnek 2: 0 satırlı ve en az 1 sütunlu boş veri çerçevesi

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

Bir ayırt etmenin bir yolu başlıklarının ve verilerin boş olduğu dataframe ya da sadece veri boşaltmak için sütun indeksi uzunluğunu test edin . İlk yüklenen veri çerçevesi sıfır sütun, ikinci veri çerçevesi boş sütun sayısını döndürür.

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

In [8]: len(df2.columns)
Out[8]: 2

-1
1) Bir DataFrame'in Nan ve Null olmayan değerleri varsa ve DataFrame'in
boş ya da değil bu kodu deneyin.
2) Bu durum ne zaman ortaya çıkabilir? 
Bu durum, birden fazla DataFrame'i çizmek için tek bir işlev kullanıldığında ortaya çıkar 
Böyle bir durumda, işlev verileri bile çizmeye çalışır 
Bir DataFrame boş olduğunda ve böylece boş bir şekil çizin !.
'DataFrame'de veri yok' mesajı görüntülenirse mantıklı olacaktır.
3) neden? 
Bir DataFrame boşsa (yani hiç veri içermiyorsa. 
boş olmadığı düşünülürse), çizmemek ancak bir mesaj göndermek istenir:
Df1 ve df2 olmak üzere iki DataFramesimiz olduğunu varsayalım.
Myfunc işlevi herhangi bir DataFrame (bu durumda df1 ve df2) alır ve bir ileti yazdırır 
bir DataFrame boşsa (çizim yapmak yerine):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

ve fonksiyon:

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')

Bu kod soruyu çözebilir, ancak bunun sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olabilir ve muhtemelen daha fazla oyla sonuçlanır. Sadece şimdi soran kişi için değil, gelecekte okuyucular için soruyu cevapladığınızı unutmayın. Lütfen açıklama eklemek için cevabınızı düzenleyin ve hangi sınırlamaların ve varsayımların geçerli olduğunu belirtin. Şu kaynaktan
double-beep
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.