Come verificare se un DataFrame di Panda è vuoto?


296

Come verificare se un panda DataFrameè vuoto? Nel mio caso voglio stampare qualche messaggio nel terminale se DataFrameè vuoto.


2
len () non funziona? Dovrebbe restituire 0 per frame di dati vuoto.
VIKASH JAISWAL

Risposte:


462

È possibile utilizzare l'attributo df.emptyper verificare se è vuoto o meno:

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

Fonte: documentazione Pandas


3
Sembra un peccato, dato che devi sapere che df è un pd.DataFrame. Mi piacerebbe conoscere la motivazione per non implementare bool () su pd.DataFrame.
Quant

17
@Quant - La documentazione ha una discussione sul perché Bool solleva un errore per un frame di dati qui: link . Citazione: "Dovrebbe essere vero perché non è di lunghezza zero? Falso perché ci sono valori falsi? Non è chiaro, quindi, invece, i panda generano un errore di valore"
Bij,

56

Io uso la lenfunzione. È molto più veloce di empty. len(df.index)è ancora più veloce.

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
Un DataFrame può essere vuoto a causa di len (df.index) == 0 o len (df.columns) == 0.
Mark Horvath,

9

Preferisco percorrere la lunga strada. Questi sono i controlli che seguo per evitare di usare una clausola try-tranne -

  1. controlla se la variabile non è nessuna
  2. quindi controlla se si tratta di un frame di dati e
  3. assicurarsi che non sia vuoto

Ecco DATAla variabile sospetta -

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

2
Ciò è ridondante e una cattiva pratica se si prevede che la variabile sarà un DataFrame (che è ciò che implica l'OP) che è vuoto o ha righe. Se non è un DF (o se non lo è), dovrebbe essere generata un'eccezione poiché qualcosa è andato storto da qualche parte.
fgblomqvist,

In Python, try/exceptè economico ed ifè costoso. Python non è né Java né C; qui è più facile chiedere perdono che autorizzazione
Nick Marinakis

4

Sembra che il accettato la definizione di vuoto in questo thread sia un frame di dati con solo zero righe. Ma esiste una distinzione tra un frame di dati vuoto con zero righe e zero colonne e un frame di dati vuoto con zero righe e almeno una colonna . In ogni caso la lunghezza dell'indice è 0 e vuota = True come mostrato qui:

Esempio 1: frame di dati vuoto con 0 righe e 0 colonne

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

Esempio 2: frame di dati vuoto con 0 righe e almeno 1 colonna

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

Un modo per distinguere tra un frame di dati vuoto di intestazioni e dati o semplicemente vuoto di dati è testare la lunghezza dell'indice di colonna . Il primo frame di dati caricato restituisce zero colonne, il secondo frame di dati restituisce il numero di colonne vuote.

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

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

-1
1) Se un DataFrame ha valori Nan e Non Null e vuoi scoprire se DataFrame
è vuoto o no quindi prova questo codice.
2) quando può verificarsi questa situazione? 
Questa situazione si verifica quando viene utilizzata una singola funzione per tracciare più di un DataFrame 
che vengono passati come parametro. In una situazione del genere la funzione tenta di tracciare anche i dati 
quando un DataFrame è vuoto e quindi tracciare una figura vuota !.
Avrà senso se visualizzi semplicemente il messaggio "DataFrame non ha dati".
3) perché? 
se un DataFrame è vuoto (vale a dire non contiene alcun dato. Cerca DataFrame con valori Nan 
è considerato non vuoto) quindi è preferibile non tracciare ma mettere un messaggio:
Supponiamo di avere due DataFrames df1 e df2.
La funzione myfunc accetta qualsiasi DataFrame (df1 e df2 in questo caso) e stampa un messaggio 
se un DataFrame è vuoto (invece di tracciare):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

e la funzione:

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

Sebbene questo codice possa risolvere la domanda, inclusa una spiegazione di come e perché questo risolva il problema, aiuterebbe davvero a migliorare la qualità del tuo post e probabilmente comporterebbe più voti positivi. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo per la persona che chiede ora. Si prega di modificare la risposta per aggiungere spiegazioni e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni. Dalla recensione
Doppio segnale acustico,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.