Як перевірити, чи панда DataFrame порожня?


296

Як перевірити, чи панда DataFrameпорожня? У моєму випадку я хочу надрукувати якесь повідомлення в терміналі, якщо поле DataFrameпорожнє.


2
len () не працює? Він повинен повернути 0 для порожнього фрейму даних.
VIKASH JAISWAL

Відповіді:


462

Ви можете використовувати атрибут, df.emptyщоб перевірити, чи порожній він чи ні:

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

Джерело: Документація панд


3
Це здається соромно, оскільки вам потрібно знати, що df - це pd.DataFrame. Мені хотілося б знати мотивацію невиконання bool () на pd.DataFrame.
Quant

17
@Quant - Документація обговорює, чому bool викликає помилку для фрейму даних тут: посилання . Цитата: "Чи повинно бути правдою, тому що це не нульова довжина? Неправдиво, тому що є помилкові значення? Незрозуміло, тому замість цього панди підвищують ValueError"
Bij

56

Я використовую lenфункцію. Це набагато швидше, ніж empty. len(df.index)ще швидше.

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
'''

7
DataFrame також може бути порожнім через len (df.index) == 0 або len (df.columns) == 0.
Марк Хорват

9

Я вважаю за краще йти довгим маршрутом. Це перевірки, яких я дотримуюся, щоб уникнути використання випробувального застереження -

  1. перевірте, чи змінною немає None
  2. потім перевірте, чи є її фрейм даних та
  3. переконайтеся, що його не порожньо

Ось DATAпеременная підозрюваної -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty

2
Це зайве і погана практика, якщо очікується, що змінна буде DataFrame (що означає те, що означає ОП), що є порожнім або має рядки. Якщо це не DF (або якщо його немає), слід виключити виняток, оскільки десь щось пішло не так.
fgblomqvist

У Python try/exceptце дешево і ifдорого. Python не є ні Java, ні C; тут простіше просити прощення, ніж дозволу
Нік Маринакіс

4

Здається, що прийняте визначення порожнього в цьому потоці - це фрейм даних з нульовими рядками. Але є різниця між порожнім фреймом даних із нульовими рядками та нульовими стовпцями та порожнім кадром даних із нульовими рядками та принаймні одним стовпцем . У кожному випадку довжина індексу дорівнює 0 та порожня = Істинно, як показано тут:

Приклад 1: порожній кадр даних з 0 рядками та 0 стовпцями

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

Приклад 2: порожній кадр даних з 0 рядками та щонайменше 1 стовпцем

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

Один із способів розрізнити фрейм даних, який не має заголовків і даних або просто порожній даних, - це перевірити довжину індексу стовпців . Перший завантажений кадр даних повертає нульові стовпці, другий кадр даних повертає кількість порожніх стовпців.

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

In [8]: len(df2.columns)
Out[8]: 2

-1
1) Якщо DataFrame має значення Nan та Non Null, і ви хочете дізнатися, чи є DataFrame
порожнє чи ні, тоді спробуйте цей код.
2) коли така ситуація може статися? 
Ця ситуація трапляється, коли одна функція використовується для побудови декількох DataFrame 
які передаються як параметр. У такій ситуації функція намагається побудувати дані навіть 
коли DataFrame порожній і, таким чином, побудувати порожню фігуру !.
Це буде сенс, якщо просто відобразити повідомлення "DataFrame не має даних".
3) чому? 
якщо DataFrame порожній (тобто не містить даних взагалі. Зверніть увагу на DataFrame зі значеннями Nan 
вважається непорожнім), то бажано не робити сюжет, а викласти повідомлення:
Припустимо, у нас є два DataFrames df1 і df2.
Функція myfunc приймає будь-яку DataFrame (в даному випадку df1 і df2) і друкує повідомлення 
якщо DataFrame порожній (замість графіки):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

і функція:

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')

Хоча цей код може вирішити питання, включаючи пояснення, як і чому це вирішує проблему, справді допоможе покращити якість вашої публікації та, ймовірно, призведе до збільшення кількості голосів. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, а не лише про людину, яка зараз задає питання. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення та вказати, які обмеження та припущення застосовуються. З огляду
подвійний звуковий сигнал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.