Wie überprüfe ich, ob ein Pandas DataFrame
leer ist? In meinem Fall möchte ich eine Nachricht im Terminal drucken, wenn die DataFrame
leer ist.
Wie überprüfe ich, ob ein Pandas DataFrame
leer ist? In meinem Fall möchte ich eine Nachricht im Terminal drucken, wenn die DataFrame
leer ist.
Antworten:
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
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
'''
Ich gehe lieber den langen Weg. Dies sind die Überprüfungen, die ich befolge, um die Verwendung einer try-Except-Klausel zu vermeiden.
Hier DATA
ist die verdächtige Variable -
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
try/except
ist billig und if
teuer. Python ist weder Java noch C; Hier ist es einfacher, um Vergebung zu bitten als um Erlaubnis
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) 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')