web-dev-qa-db-fra.com

Comment vérifier si un pandas DataFrame est vide?

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

238

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

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

Source: Documentation Pandas

367
aIKid

J'utilise la fonction len. 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
'''
43
Zero

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

  1. vérifier si la variable n'est pas None
  2. puis vérifiez si c'est un dataframe et
  3. assurez-vous que ce n'est pas vide

Ici, DATA est la variable suspecte -

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

Il apparaît que la définition acceptée de empty dans ce fil est une image de données avec zéro ligne uniquement. Mais il existe une distinction entre une image vide avec zéro ligne et zéro colonne et une image vide avec zéro ligne et au moins une colonne. Dans chaque cas, la longueur de l'index est 0 et empty = True, comme indiqué ici:

Exemple 1: dataframe vide avec zéro ligne et zéro 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

Exemple 2: dataframe vide avec zéro ligne 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

Un moyen de distinguer 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 la colonne. Le premier cadre de données chargé ne renvoie aucune colonne, le second renvoie le nombre de colonnes.

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

In [8]: len(df2.columns)
Out[8]: 2
2
Sven Haile