Как проверить, пустой ли DataFrame в pandas?
Как я могу проверить, является ли DataFrame
в библиотеке pandas пустым? Я хочу вывести сообщение в терминале, если DataFrame
пустой.
3 ответ(ов)
Вам действительно не стоит использовать метод 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)
будет идеальным решением.
Я предпочитаю использовать более длинный, но надежный подход. Вот проверки, которые я выполняю, чтобы избежать использования блока try-except:
- Проверяю, что переменная не равна None.
- Затем проверяю, является ли она DataFrame.
- Убеждаюсь, что он не пустой.
В данном случае подозрительная переменная — это DATA
:
DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty
Таким образом, я избегаю потенциальных ошибок и делаю код более понятным.
Если у вас есть DataFrame, который содержит значения Nan и ненулевые значения, и вы хотите проверить, пустой он или нет, попробуйте следующий код.
Когда может возникнуть такая ситуация? Эта ситуация может возникнуть, когда одна функция используется для построения графиков более чем одного DataFrame, которые передаются в качестве параметров. В такой ситуации функция попытается построить график, даже если один из DataFrame пуст, и в результате получится пустая фигура. В этом случае было бы логично выводить сообщение «DataFrame не содержит данных».
Почему? Если 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.
Как выбрать строки из DataFrame на основе значений столбцов?
Создание DataFrame в Pandas путём последовательного добавления строк
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Получение списка из заголовков столбцов DataFrame в Pandas