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)==0def 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
'''
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.
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
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.
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
Nan2NanNan2NanNanNan
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 emptyprint('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
Respostas:
Você pode usar o atributo
df.empty
para verificar se está vazio ou não:Fonte: Documentação do Pandas
fonte
Eu uso a
len
função É muito mais rápido queempty
.len(df.index)
é ainda mais rápido.fonte
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 -fonte
try/except
é barato eif
caro. Python não é Java nem C; aqui é mais fácil pedir perdão do que permissãoParece 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
Exemplo 2: dataframe vazio com 0 linhas e pelo menos 1 coluna
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.
fonte
e a função:
fonte