Como verificar se um panda DataFrame
está vazio? No meu caso, quero imprimir alguma mensagem no terminal, se DataFrame
estiver vazia.
Como verificar se um panda DataFrame
está vazio? No meu caso, quero imprimir alguma mensagem no terminal, se DataFrame
estiver vazia.
Respostas:
Você pode usar o atributo df.empty
para verificar se está vazio ou não:
if df.empty:
print('DataFrame is empty!')
Fonte: Documentação do Pandas
Eu uso a len
funçã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
'''
Eu prefiro seguir o longo caminho. Estas são as verificações que sigo para evitar o uso de uma cláusula try-except -
Aqui DATA
está a variável suspeita -
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
try/except
é barato e if
caro. Python não é Java nem C; aqui é mais fácil pedir perdão do que permissão
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) 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')