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.


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


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

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

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.