Come verificare se un panda DataFrame
è vuoto? Nel mio caso voglio stampare qualche messaggio nel terminale se DataFrame
è vuoto.
Come verificare se un panda DataFrame
è vuoto? Nel mio caso voglio stampare qualche messaggio nel terminale se DataFrame
è vuoto.
Risposte:
È possibile utilizzare l'attributo df.empty
per verificare se è vuoto o meno:
if df.empty:
print('DataFrame is empty!')
Fonte: documentazione Pandas
Io uso la len
funzione. È 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
'''
Preferisco percorrere la lunga strada. Questi sono i controlli che seguo per evitare di usare una clausola try-tranne -
Ecco DATA
la variabile sospetta -
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
try/except
è economico ed if
è costoso. Python non è né Java né C; qui è più facile chiedere perdono che autorizzazione
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) 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')