¿Cómo comprobar si un dataframe de pandas está vacío?

¿Cómo comprobar si un DataFrame pandas está vacío? En mi caso, quiero imprimir algún mensaje en la terminal si el DataFrame está vacío.

Puede usar el atributo df.empty para verificar si está vacío o no:

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

Fuente: Documentación Pandas.

Yo uso la función len. Es mucho más rápido que el vacío (). len (df.index) es aún más 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 ''' 

Prefiero ir por el camino largo. Estos son los controles que sigo para evitar el uso de una cláusula try-except –

  1. verifica si la variable no es ninguna
  2. a continuación, compruebe si es un dataframe y
  3. asegúrate de que no esté vacío

Aquí, DATA es la variable sospechosa –

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

Parece que la definición de vacío aceptada en este hilo es un dataframe con solo cero filas. Pero hay una distinción entre un dataframe vacío con cero filas y cero columnas y un dataframe vacío con cero filas y al menos una columna. En cada caso, la longitud del índice es 0 y vacío = Verdadero como se muestra aquí:

Ejemplo 1: dataframe vacío con cero filas y cero columnas

 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 

Ejemplo 2: dataframe vacío con cero filas y al menos 1 columna

 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 

Una forma de distinguir entre un dataframe que está vacío de encabezados y datos o simplemente vacío de datos es probar la longitud del índice de la columna. El primer dataframe cargado devuelve cero columnas, el segundo devuelve el número de columnas.

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