¿Cómo verificar si un panda DataFrame
está vacío? En mi caso quiero imprimir algún mensaje en la terminal si DataFrame
está vacío.
¿Cómo verificar si un panda DataFrame
está vacío? En mi caso quiero imprimir algún mensaje en la terminal si DataFrame
está vacío.
Respuestas:
Puede usar el atributo df.empty
para verificar si está vacío o no:
if df.empty:
print('DataFrame is empty!')
Fuente: Documentación de Pandas
Yo uso la len
función Es mucho más rápido que empty
. 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 la ruta larga. Estas son las comprobaciones que sigo para evitar el uso de una cláusula try-except
Aquí DATA
está la variable sospechosa:
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
try/except
es barato y if
es caro. Python no es Java ni C; aquí es más fácil pedir perdón que permiso
Parece que la definición aceptada de vacío en este hilo es un marco de datos con solo cero filas. Pero hay una distinción entre un marco de datos vacío con cero filas y cero columnas y un marco de datos vacío con cero filas y al menos una columna . En cada caso, la longitud del índice es 0 y vacía = Verdadero como se muestra aquí:
Ejemplo 1: marco de datos vacío con 0 filas y 0 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: marco de datos vacío con 0 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 marco de datos 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 marco de datos cargado devuelve cero columnas, el segundo marco de datos devuelve el número de columnas vacías.
In [7]: len(df1.columns)
Out[7]: 0
In [8]: len(df2.columns)
Out[8]: 2
1) Si un DataFrame tiene valores Nan y no nulos y desea saber si el DataFrame está vacío o no, intente este código. 2) cuando esta situación puede suceder? Esta situación ocurre cuando se usa una sola función para trazar más de un DataFrame que se pasan como parámetro. En tal situación, la función intenta trazar los datos incluso cuando un DataFrame está vacío y, por lo tanto, traza una figura vacía. Tendrá sentido si simplemente muestra el mensaje 'DataFrame no tiene datos'. 3) ¿por qué? si un DataFrame está vacío (es decir, no contiene ningún dato. Mírelo DataFrame con valores Nan se considera no vacío), entonces es deseable no trazar, sino enviar un mensaje: Supongamos que tenemos dos DataFrames df1 y df2. La función myfunc toma cualquier DataFrame (df1 y df2 en este caso) e imprime un mensaje si un DataFrame está vacío (en lugar de trazar):
df1 df2
col1 col2 col1 col2
Nan 2 Nan Nan
2 Nan Nan Nan
y la función:
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')