7

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

1

Как я могу проверить, является ли DataFrame в библиотеке pandas пустым? Я хочу вывести сообщение в терминале, если DataFrame пустой.

3 ответ(ов)

1

Вам действительно не стоит использовать метод empty, если вам нужно проверить, пуст ли DataFrame. Функция len работает значительно быстрее. Как вы упомянули, использование 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
'''

Результаты показывают, что empty() работает примерно за 13.9 микросекунд, len(df) — за 2.34 микросекунды, а len(df.index) — всего 695 наносекунд. Таким образом, использование метода len на индексе действительно оказывается самым быстрым способом проверки, пуст ли DataFrame. Выбирайте тот способ, который подходит вам лучше всего, но для производительности len(df.index) будет идеальным решением.

0

Я предпочитаю использовать более длинный, но надежный подход. Вот проверки, которые я выполняю, чтобы избежать использования блока try-except:

  1. Проверяю, что переменная не равна None.
  2. Затем проверяю, является ли она DataFrame.
  3. Убеждаюсь, что он не пустой.

В данном случае подозрительная переменная — это DATA:

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

Таким образом, я избегаю потенциальных ошибок и делаю код более понятным.

0
  1. Если у вас есть DataFrame, который содержит значения Nan и ненулевые значения, и вы хотите проверить, пустой он или нет, попробуйте следующий код.

  2. Когда может возникнуть такая ситуация? Эта ситуация может возникнуть, когда одна функция используется для построения графиков более чем одного DataFrame, которые передаются в качестве параметров. В такой ситуации функция попытается построить график, даже если один из DataFrame пуст, и в результате получится пустая фигура. В этом случае было бы логично выводить сообщение «DataFrame не содержит данных».

  3. Почему? Если DataFrame пустой (т.е. не содержит никаких данных. Обратите внимание, что DataFrame, содержащий значения Nan, считается непустым), то желательно не строить график, а вывести сообщение: допустим, у нас есть два DataFrame 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:  # Считаем общее количество ненулевых значений. Будет равно 0, если DataFrame пустой
        print('not empty')
        df.plot(kind='barh')
    else:
        # Выводим сообщение вместо построения графика, если DataFrame пустой
        print('empty')

Таким образом, вы сможете избежать попытки построить график для пустого DataFrame.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь