Jak sprawdzić, czy pandy DataFrame
są puste? W moim przypadku chcę wydrukować jakiś komunikat w terminalu, jeśli DataFrame
jest pusty.
Jak sprawdzić, czy pandy DataFrame
są puste? W moim przypadku chcę wydrukować jakiś komunikat w terminalu, jeśli DataFrame
jest pusty.
Odpowiedzi:
Możesz użyć tego atrybutu, df.empty
aby sprawdzić, czy jest pusty, czy nie:
if df.empty:
print('DataFrame is empty!')
Źródło: Dokumentacja Pandas
Korzystam z len
funkcji. 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
'''
Wolę iść długą drogą. Są to kontrole, które wykonuję, aby uniknąć użycia klauzuli try-wyjątkiem -
Tutaj DATA
jest zmienna podejrzana -
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
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
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')