Wie überprüfe ich, ob ein Pandas DataFrame leer ist?


296

Wie überprüfe ich, ob ein Pandas DataFrameleer ist? In meinem Fall möchte ich eine Nachricht im Terminal drucken, wenn die DataFrameleer ist.


2
len () funktioniert nicht? Für leeren Datenrahmen sollte 0 zurückgegeben werden.
VIKASH JAISWAL

Antworten:


462

Mit dem Attribut können Sie df.emptyüberprüfen, ob es leer ist oder nicht:

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

Quelle: Pandas-Dokumentation


3
Dies scheint eine Schande zu sein, da Sie wissen müssen, dass df ein pd.DataFrame ist. Ich möchte die Motivation kennen, bool () nicht auf pd.DataFrame zu implementieren.
Quant

17
@Quant - In der Dokumentation wird erläutert, warum bool hier einen Fehler für einen Datenrahmen auslöst: link . Zitat: "Sollte es wahr sein, weil es nicht null Länge ist? Falsch, weil es falsche Werte gibt? Es ist unklar, also löst Pandas stattdessen einen ValueError aus"
Bij

56

Ich verwende das len Funktion. Es ist viel schneller als empty. len(df.index)ist noch schneller.

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
'''

7
Ein DataFrame kann entweder aufgrund von len (df.index) == 0 oder len (df.columns) == 0 ebenfalls leer sein.
Mark Horvath

9

Ich gehe lieber den langen Weg. Dies sind die Überprüfungen, die ich befolge, um die Verwendung einer try-Except-Klausel zu vermeiden.

  1. Überprüfen Sie, ob die Variable nicht None ist
  2. Überprüfen Sie dann, ob es sich um einen Datenrahmen handelt, und
  3. Stellen Sie sicher, dass es nicht leer ist

Hier DATAist die verdächtige Variable -

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

2
Dies ist redundant und eine schlechte Praxis, wenn erwartet wird, dass die Variable ein DataFrame ist (was das OP impliziert), der entweder leer ist oder Zeilen enthält. Wenn es kein DF ist (oder wenn es keiner ist), sollte eine Ausnahme ausgelöst werden, da irgendwo etwas schief gelaufen ist.
fgblomqvist

In Python try/exceptist billig und ifteuer. Python ist weder Java noch C; Hier ist es einfacher, um Vergebung zu bitten als um Erlaubnis
Nick Marinakis

4

Es scheint, dass die akzeptierte Definition von leer in diesem Thread ein Datenrahmen mit nur null Zeilen ist. Es wird jedoch zwischen einem leeren Datenrahmen mit null Zeilen und null Spalten und einem leeren Datenrahmen mit null Zeilen und mindestens einer Spalte unterschieden . In jedem Fall ist die Länge des Index 0 und leer = True, wie hier gezeigt:

Beispiel 1: leerer Datenrahmen mit 0 Zeilen und 0 Spalten

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

Beispiel 2: leerer Datenrahmen mit 0 Zeilen und mindestens 1 Spalte

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

Eine Möglichkeit, zwischen einem Datenrahmen zu unterscheiden, der keine Header und Daten enthält oder nur keine Daten enthält, besteht darin , die Länge des Spaltenindex zu testen . Der erste geladene Datenrahmen gibt null Spalten zurück, der zweite Datenrahmen gibt die Anzahl der leeren Spalten zurück.

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

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

-1
1) Wenn ein DataFrame Nan- und Nicht-Null-Werte hat und Sie herausfinden möchten, ob der DataFrame
ist leer oder nicht, dann versuchen Sie diesen Code.
2) Wann kann diese Situation eintreten? 
Diese Situation tritt auf, wenn eine einzelne Funktion verwendet wird, um mehr als einen DataFrame zu zeichnen 
die als Parameter übergeben werden. In einer solchen Situation versucht die Funktion, die Daten gleichmäßig zu zeichnen 
wenn ein DataFrame leer ist und somit eine leere Figur plottet!.
Es ist sinnvoll, wenn einfach die Meldung "DataFrame hat keine Daten" angezeigt wird.
3) warum? 
Wenn ein DataFrame leer ist (dh überhaupt keine Daten enthält. Denken Sie an DataFrame mit Nan-Werten 
wird als nicht leer betrachtet), dann ist es wünschenswert, nicht zu zeichnen, sondern eine Nachricht auszugeben:
Angenommen, wir haben zwei DataFrames df1 und df2.
Die Funktion myfunc nimmt einen beliebigen DataFrame (in diesem Fall df1 und df2) und druckt eine Nachricht 
Wenn ein DataFrame leer ist (anstatt zu zeichnen):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

und die Funktion:

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')

Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten. Aus der Überprüfung
doppelter Piepton
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.