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)==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
'''
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.
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
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.
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
Nan2NanNan2NanNanNan
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 emptyprint('not empty')
df.plot(kind='barh')else:
display a message instead of plotting if it is empty
print('empty')
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
Réponses:
Vous pouvez utiliser l'attribut
df.empty
pour vérifier s'il est vide ou non:Source: Documentation Pandas
la source
J'utilise la
len
fonction. C'est beaucoup plus rapide queempty
.len(df.index)
est encore plus rapide.la source
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 -la source
try/except
c'est bon marché etif
c'est cher. Python n'est ni Java ni C; ici, il est plus facile de demander pardon que de permissionIl 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
Exemple 2: trame de données vide avec 0 lignes et au moins 1 colonne
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.
la source
et la fonction:
la source