Это кажется позором, так как вам нужно знать, что df - это pd.DataFrame. Я хотел бы знать мотивацию для не реализации bool () на pd.DataFrame.
Кван
17
@Quant - в документации обсуждается, почему bool вызывает ошибку для фрейма данных здесь: ссылка . Цитата: «Должно ли это быть True, потому что это не нулевая длина? False, потому что есть False значения? Это неясно, поэтому вместо этого pandas вызывает ValueError»
Bij
56
Я использую lenфункцию. Это намного быстрее, чем empty. len(df.index)еще быстрее.
import pandas as pdimport numpy as np
df = pd.DataFrame(np.random.randn(10000,4), columns=list('ABCD'))def empty(df):return df.emptydef 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
'''
Это избыточно и плохая практика, если ожидается, что переменная будет 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()
df1Out[1]:EmptyDataFrameColumns:[]Index:[]In[2]: len(df1.index)Out[2]:0In[3]: df1.emptyOut[3]:True
Пример 2: пустой фрейм данных с 0 строками и хотя бы 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 Nan2NanNan2NanNanNan
и функция:
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 emptyprint('empty')
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, получит больше голосов "за". Помните, что вы отвечаете на вопрос для читателей в будущем, а не только для того, кто спрашивает сейчас. Пожалуйста, измените свой ответ, чтобы добавить объяснения и указать, какие ограничения и предположения применяются. Из обзора
Ответы:
Вы можете использовать атрибут,
df.empty
чтобы проверить, является ли он пустым или нет:Источник: Документация Панд
источник
Я использую
len
функцию. Это намного быстрее, чемempty
.len(df.index)
еще быстрее.источник
Я предпочитаю идти по длинному маршруту. Вот те проверки, которые я выполняю, чтобы избежать использования условия try-exc
Вот
DATA
подозрительная переменная -источник
try/except
это дешево иif
дорого. Python не является ни Java, ни C; здесь прощеПохоже, что принятое определение пустого в этом потоке является кадром данных только с нулевыми строками. Но существует различие между пустым фреймом данных с нулевыми строками и нулевыми столбцами и пустым фреймом данных с нулевыми строками и хотя бы одним столбцом . В каждом случае длина индекса равна 0 и пусто = True, как показано здесь:
Пример 1: пустой фрейм данных с 0 строками и 0 столбцами
Пример 2: пустой фрейм данных с 0 строками и хотя бы 1 столбцом
Один из способов различить фрейм данных, который не содержит заголовков и данных или просто не содержит данных, состоит в проверке длины индекса столбца . Первый загруженный фрейм данных возвращает ноль столбцов, второй фрейм данных возвращает количество пустых столбцов.
источник
и функция:
источник