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.
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
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
'''
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 -
Ici, DATA
est la variable suspecte -
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
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