Как проверить, пуст ли DataFrame от pandas?


296

Как проверить, DataFrameпуста ли панда ? В моем случае я хочу напечатать какое-нибудь сообщение в терминале, если DataFrameоно пустое.


2
len () не работает? Он должен вернуть 0 для пустого информационного кадра.
Викаш Джайсвал

Ответы:


462

Вы можете использовать атрибут, df.emptyчтобы проверить, является ли он пустым или нет:

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

Источник: Документация Панд


3
Это кажется позором, так как вам нужно знать, что df - это pd.DataFrame. Я хотел бы знать мотивацию для не реализации bool () на pd.DataFrame.
Кван

17
@Quant - в документации обсуждается, почему bool вызывает ошибку для фрейма данных здесь: ссылка . Цитата: «Должно ли это быть True, потому что это не нулевая длина? False, потому что есть False значения? Это неясно, поэтому вместо этого pandas вызывает 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

Я предпочитаю идти по длинному маршруту. Вот те проверки, которые я выполняю, чтобы избежать использования условия try-exc

  1. проверить, не является ли переменная None
  2. затем проверьте, если это датафрейм и
  3. убедитесь, что он не пустой

Вот DATAподозрительная переменная -

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

2
Это избыточно и плохая практика, если ожидается, что переменная будет DataFrame (что подразумевает OP), которая либо пуста, либо содержит строки. Если это не DF (или если нет), должно быть сгенерировано исключение, так как где-то что-то пошло не так.
fgblomqvist

В Python try/exceptэто дешево и ifдорого. Python не является ни Java, ни C; здесь проще
просить

4

Похоже, что принятое определение пустого в этом потоке является кадром данных только с нулевыми строками. Но существует различие между пустым фреймом данных с нулевыми строками и нулевыми столбцами и пустым фреймом данных с нулевыми строками и хотя бы одним столбцом . В каждом случае длина индекса равна 0 и пусто = True, как показано здесь:

Пример 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.