Comment vérifier si un DataFrame pandas est vide?

296

Comment vérifier si un pandas DataFrameest vide? Dans mon cas, je veux imprimer un message dans le terminal si le DataFrameest vide.

Nilani Algiriyage
la source
2
len () ne fonctionne pas? Il doit retourner 0 pour une trame de données vide.
VIKASH JAISWAL

Réponses:

462

Vous pouvez utiliser l'attribut df.emptypour vérifier s'il est vide ou non:

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

Source: Documentation Pandas

aIKid
la source
3
Cela semble dommage, car vous devez savoir que df est un pd.DataFrame. Je voudrais connaître la motivation pour ne pas implémenter bool () sur pd.DataFrame.
Quant
17
@Quant - La documentation explique pourquoi bool déclenche une erreur pour une trame de données ici: lien . Citation: "Cela devrait-il être vrai parce qu'il n'est pas de longueur nulle? Faux parce qu'il y a de fausses valeurs? Ce n'est pas clair, donc à la place, les pandas soulèvent une ValueError"
Bij
56

J'utilise la lenfonction. C'est beaucoup plus rapide que empty. len(df.index)est encore plus rapide.

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
'''
Zéro
la source
7
Un DataFrame peut être vide en raison de len (df.index) == 0 ou len (df.columns) == 0 également.
Mark Horvath
9

Je préfère emprunter la longue route. Ce sont les vérifications que je fais pour éviter d'utiliser une clause try-except -

  1. vérifier si la variable n'est pas Aucune
  2. puis vérifiez si c'est une trame de données et
  3. assurez-vous que ce n'est pas vide

Ici, DATAest la variable suspecte -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
fixxxer
la source
2
C'est redondant et une mauvaise pratique si l'on s'attend à ce que la variable soit un DataFrame (c'est ce que l'OP implique) qui est soit vide soit avec des lignes. S'il ne s'agit pas d'un DF (ou s'il n'en existe aucun), une exception doit être levée car quelque chose s'est mal passé quelque part.
fgblomqvist
En Python, try/exceptc'est bon marché et ifc'est cher. Python n'est ni Java ni C; ici, il est plus facile de demander pardon que de permission
Nick Marinakis
4

Il semble que la définition acceptée de vide dans ce thread est une trame de données avec zéro lignes uniquement. Mais il existe une distinction entre une trame de données vide avec zéro lignes et zéro colonnes et une trame de données vide avec zéro lignes et au moins une colonne . Dans chaque cas, la longueur de l'index est 0 et vide = True comme indiqué ici:

Exemple 1: trame de données vide avec 0 lignes et 0 colonnes

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

Exemple 2: trame de données vide avec 0 lignes et au moins 1 colonne

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

Une façon de faire la distinction entre une trame de données vide d'en-têtes et de données ou simplement vide de données consiste à tester la longueur de l'index de colonne . La première trame de données chargée renvoie zéro colonne, la deuxième trame de données renvoie le nombre de colonnes vides.

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

In [8]: len(df2.columns)
Out[8]: 2
Sven Haile
la source
-1
1) Si un DataFrame a des valeurs Nan et Non Null et que vous voulez savoir si le DataFrame
est vide ou non alors essayez ce code.
2) quand cette situation peut-elle se produire? 
Cette situation se produit lorsqu'une seule fonction est utilisée pour tracer plusieurs DataFrame 
qui sont passés en paramètre. Dans une telle situation, la fonction essaie de tracer les données même 
quand un DataFrame est vide et tracer ainsi une figure vide!.
Il sera logique d'afficher simplement le message «DataFrame n'a pas de données».
3) pourquoi? 
si un DataFrame est vide (c.-à-d. ne contient aucune donnée. Rappelez-vous DataFrame avec des valeurs Nan 
est considéré comme non vide) alors il est souhaitable de ne pas tracer mais de diffuser un message:
Supposons que nous ayons deux DataFrames df1 et df2.
La fonction myfunc prend n'importe quel DataFrame (df1 et df2 dans ce cas) et affiche un message 
si un DataFrame est vide (au lieu de tracer):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

et la fonction:

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')
Gul Saeed Khattak
la source
Bien que ce code puisse résoudre la question, y compris une explication de comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre message, et entraînerait probablement plus de votes positifs. N'oubliez pas que vous répondrez à la question aux lecteurs à l'avenir, pas seulement à la personne qui pose la question maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limitations et hypothèses applicables. De l'avis
double bip