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)==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
'''
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.
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
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.
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
Nan2NanNan2NanNanNan
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 emptyprint('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
Antworten:
Mit dem Attribut können Sie
df.empty
überprüfen, ob es leer ist oder nicht:Quelle: Pandas-Dokumentation
quelle
Ich verwende das
len
Funktion. Es ist viel schneller alsempty
.len(df.index)
ist noch schneller.quelle
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 -quelle
try/except
ist billig undif
teuer. Python ist weder Java noch C; Hier ist es einfacher, um Vergebung zu bitten als um ErlaubnisEs 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
Beispiel 2: leerer Datenrahmen mit 0 Zeilen und mindestens 1 Spalte
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.
quelle
und die Funktion:
quelle