Esto parece una pena, ya que necesita saber que df es un pd.DataFrame. Me gustaría saber la motivación para no implementar bool () en pd.DataFrame.
Quant
17
@Quant: la documentación tiene una discusión sobre por qué bool genera un error para un marco de datos aquí: enlace . Cita: "¿Debería ser cierto porque no es de longitud cero? ¿Falso porque hay valores falsos? No está claro, así que, en cambio, los pandas generan un ValueError"
Bij
56
Yo uso la lenfunció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)==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
'''
Esto es redundante y una mala práctica si se espera que la variable sea un DataFrame (que es lo que implica el OP) que está vacío o tiene filas. Si no es un DF (o si no es ninguno), se debe lanzar una excepción ya que algo salió mal en alguna parte.
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
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.
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
Nan2NanNan2NanNanNan
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 emptyprint('not empty')
df.plot(kind='barh')else:
display a message instead of plotting if it is empty
print('empty')
Si bien este código puede resolver la pregunta, incluir una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación, y probablemente resultaría en más votos positivos. Recuerde que está respondiendo la pregunta para los lectores en el futuro, no solo la persona que pregunta ahora. Por favor, editar su respuesta para agregar explicaciones y dar una indicación de lo que se aplican limitaciones y supuestos. De la opinión
Respuestas:
Puede usar el atributo
df.empty
para verificar si está vacío o no:Fuente: Documentación de Pandas
fuente
Yo uso la
len
función Es mucho más rápido queempty
.len(df.index)
Es aún más rápido.fuente
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:fuente
try/except
es barato yif
es caro. Python no es Java ni C; aquí es más fácil pedir perdón que permisoParece 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
Ejemplo 2: marco de datos vacío con 0 filas y al menos 1 columna
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.
fuente
y la función:
fuente