Jak sprawdzić, czy panda DataFrame jest pusta?

295

Jak sprawdzić, czy pandy DataFramesą puste? W moim przypadku chcę wydrukować jakiś komunikat w terminalu, jeśli DataFramejest pusty.

Nilani Algiriyage
źródło
2
len () nie działa? Powinien zwrócić 0 dla pustej ramki danych.
VIKASH JAISWAL

Odpowiedzi:

461

Możesz użyć tego atrybutu, df.emptyaby sprawdzić, czy jest pusty, czy nie:

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

Źródło: Dokumentacja Pandas

aIKid
źródło
3
To wydaje się wstydem, ponieważ musisz wiedzieć, że df to pd.DataFrame. Chciałbym poznać motywację do niewprowadzania bool () na pd.DataFrame.
Quant
17
@Quant - Dokumentacja ma dyskusji o tym, dlaczego bool zgłasza błąd dla dataframe tutaj: łącza . Cytat: „Czy to musi być prawda, ponieważ nie ma zerowej długości? Fałsz, ponieważ istnieją fałszywe wartości? Jest niejasne, więc zamiast tego, pandy podnoszą błąd ValueError”
Bij
56

Korzystam z lenfunkcji. Jest znacznie szybszy niż empty. len(df.index)jest jeszcze szybszy.

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
'''
Zero
źródło
7
DataFrame może być pusta, ponieważ albo len (df.index) == 0, albo len (df.columns) == 0 również.
Mark Horvath,
9

Wolę iść długą drogą. Są to kontrole, które wykonuję, aby uniknąć użycia klauzuli try-wyjątkiem -

  1. sprawdź, czy zmienna nie jest Brak
  2. następnie sprawdź, czy jest to ramka danych i
  3. upewnij się, że nie jest pusty

Tutaj DATAjest zmienna podejrzana -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
fixxxer
źródło
2
Jest to zbędna i zła praktyka, jeśli oczekuje się, że zmienna będzie DataFrame (co sugeruje OP), która jest pusta lub ma wiersze. Jeśli nie jest to DF (lub jeśli nie jest), należy zgłosić wyjątek, ponieważ gdzieś coś poszło nie tak.
fgblomqvist
W Pythonie try/exceptjest tani i ifdrogi. Python nie jest ani Java, ani C; tutaj łatwiej
prosić o
4

Wygląda na to, że przyjęta definicja pustego w tym wątku to ramka danych z zerowymi wierszami. Istnieje jednak różnica między pustą ramką danych z zerowymi wierszami i zerowymi kolumnami a pustą ramką danych z zerowymi wierszami i co najmniej jedną kolumną . W każdym przypadku długość indeksu wynosi 0 i jest pusta = prawda, jak pokazano tutaj:

Przykład 1: pusta ramka danych z 0 wierszami i 0 kolumnami

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

Przykład 2: pusta ramka danych z 0 wierszami i co najmniej 1 kolumną

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

Jednym ze sposobów rozróżnienia ramki danych, która jest pusta od nagłówków i danych lub po prostu pusta danych, jest przetestowanie długości indeksu kolumny . Pierwsza załadowana ramka danych zwraca zero kolumn, druga ramka danych zwraca liczbę pustych kolumn.

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

In [8]: len(df2.columns)
Out[8]: 2
Sven Haile
źródło
-1
1) Jeśli DataFrame ma wartości Nan i Non Null, a chcesz sprawdzić, czy DataFrame
jest pusty lub nie, spróbuj tego kodu.
2) kiedy taka sytuacja może się zdarzyć? 
Taka sytuacja ma miejsce, gdy pojedyncza funkcja jest używana do kreślenia więcej niż jednej ramki danych 
które są przekazywane jako parametr. W takiej sytuacji funkcja próbuje nawet wykreślić dane 
gdy DataFrame jest pusta i dlatego wykreśl pustą liczbę !.
Ma to sens, jeśli po prostu wyświetli się komunikat „DataFrame nie ma danych”.
3) dlaczego? 
jeśli DataFrame jest pusta (tzn. nie zawiera żadnych danych. Przypomnij sobie DataFrame z wartościami Nan 
jest uważane za niepuste), pożądane jest, aby nie drukować, ale wysyłać komunikat:
Załóżmy, że mamy dwa DataFrames df1 i df2.
Funkcja myfunc pobiera dowolną ramkę danych (w tym przypadku df1 i df2) i drukuje komunikat 
jeśli DataFrame jest pusta (zamiast drukowania):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

i funkcja:

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')
Gul Saeed Khattak
źródło
Chociaż ten kod może rozwiązać pytanie, w tym wyjaśnienie, w jaki sposób i dlaczego to rozwiązuje problem, naprawdę pomógłby poprawić jakość twojego postu i prawdopodobnie zwiększyłby liczbę głosów pozytywnych. Pamiętaj, że odpowiadasz na pytanie czytelników w przyszłości, a nie tylko osoby zadającej teraz pytanie. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia. Z recenzji
podwójny sygnał dźwiękowy