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.
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.
Réponses:
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 len
fonction. 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 emprunter la longue route. Ce sont les vérifications que je fais 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
try/except
c'est bon marché et if
c'est cher. Python n'est ni Java ni C; ici, il est plus facile de demander pardon que de permission
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
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')