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)==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
'''
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
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.
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
Nan2NanNan2NanNanNan
i funkcja:
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')
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
Odpowiedzi:
Możesz użyć tego atrybutu,
df.empty
aby sprawdzić, czy jest pusty, czy nie:Źródło: Dokumentacja Pandas
źródło
Korzystam z
len
funkcji. Jest znacznie szybszy niżempty
.len(df.index)
jest jeszcze szybszy.źródło
Wolę iść długą drogą. Są to kontrole, które wykonuję, aby uniknąć użycia klauzuli try-wyjątkiem -
Tutaj
DATA
jest zmienna podejrzana -źródło
try/except
jest tani iif
drogi. Python nie jest ani Java, ani C; tutaj łatwiejWyglą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
Przykład 2: pusta ramka danych z 0 wierszami i co najmniej 1 kolumną
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.
źródło
i funkcja:
źródło