Como verificar se um DataFrame do pandas está vazio?

296

Como verificar se um panda DataFrameestá vazio? No meu caso, quero imprimir alguma mensagem no terminal, se DataFrameestiver vazia.

Nilani Algiriyage
fonte
2
len () não funciona? Ele deve retornar 0 para o quadro de dados vazio.
VIKASH JAISWAL

Respostas:

462

Você pode usar o atributo df.emptypara verificar se está vazio ou não:

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

Fonte: Documentação do Pandas

aIKid
fonte
3
Parece uma pena, pois você precisa saber que df é um pd.DataFrame. Gostaria de saber a motivação para não implementar bool () no pd.DataFrame.
Quant
17
@Quant - A documentação tem uma discussão sobre por que o bool gera um erro para um dataframe aqui: link . Citação: "? Caso seja verdade, porque não é zero comprimento Falso porque há falsos valores Não está claro, por isso, em vez disso, pandas levanta uma ValueError"
Bij
56

Eu uso a lenfunção É muito mais rápido que empty. len(df.index)é ainda mais rápido.

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
'''
Zero
fonte
7
Um DataFrame pode estar vazio devido a len (df.index) == 0 ou len (df.columns) == 0 também.
Mark Horvath
9

Eu prefiro seguir o longo caminho. Estas são as verificações que sigo para evitar o uso de uma cláusula try-except -

  1. verifique se a variável não é Nenhuma
  2. verifique se é um dataframe e
  3. verifique se não está vazio

Aqui DATAestá a variável suspeita -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
fixxxer
fonte
2
Essa é uma prática redundante e ruim, se for esperado que a variável seja um DataFrame (que é o que o OP implica) que esteja vazio ou que tenha linhas. Se não for um DF (ou se não for nenhum), uma exceção deve ser lançada, pois algo deu errado em algum lugar.
Fgblomqvist 19/09/19
Em Python, try/excepté barato e ifcaro. Python não é Java nem C; aqui é mais fácil pedir perdão do que permissão
Nick Marinakis 14/04
4

Parece que a definição de vazio aceita neste encadeamento é um quadro de dados com apenas zero linhas. Mas há uma distinção entre um quadro de dados vazio com zero linhas e colunas zero e um quadro de dados vazio com zero linhas e pelo menos uma coluna . Em cada caso, o comprimento do índice é 0 e vazio = True, como mostrado aqui:

Exemplo 1: dataframe vazio com 0 linhas e 0 colunas

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

Exemplo 2: dataframe vazio com 0 linhas e pelo menos 1 coluna

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

Uma maneira de distinguir entre um quadro de dados vazio de cabeçalhos e dados ou apenas vazio de dados é testar o comprimento do índice da coluna . O primeiro dataframe carregado retorna zero colunas, o segundo dataframe retorna o número de colunas vazias.

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

In [8]: len(df2.columns)
Out[8]: 2
Sven Haile
fonte
-1
1) Se um DataFrame tiver valores Nan e Não Nulo e você desejar descobrir se o DataFrame
está vazio ou não, tente este código.
2) quando esta situação pode acontecer? 
Essa situação ocorre quando uma única função é usada para plotar mais de um DataFrame 
que são passados ​​como parâmetro.Nessa situação, a função tenta plotar os dados mesmo 
quando um DataFrame estiver vazio e, assim, plotar uma figura vazia!
Faz sentido se simplesmente exibir a mensagem 'DataFrame has no data'.
3) por que? 
se um DataFrame estiver vazio (por exemplo, não contém dados. 
é considerado não vazio), é desejável não plotar, mas enviar uma mensagem:
Suponha que tenhamos dois DataFrames df1 e df2.
A função myfunc pega qualquer DataFrame (df1 e df2 neste caso) e imprime uma mensagem 
se um DataFrame estiver vazio (em vez de plotar):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

e a função:

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
fonte
Embora esse código possa resolver a questão, incluir uma explicação de como e por que isso resolve o problema realmente ajudaria a melhorar a qualidade da sua postagem e provavelmente resultaria em mais votos positivos. Lembre-se de que você está respondendo à pergunta dos leitores no futuro, não apenas à pessoa que está perguntando agora. Por favor edite sua resposta para adicionar explicações e dar uma indicação do que limitações e premissas se aplicam. Da avaliação
double-beep