pandas DataFrameが空かどうかを確認するにはどうすればよいですか?


296

パンダDataFrameが空かどうかを確認するにはどうすればよいですか?私の場合、ターミナルDataFrameが空の場合にターミナルにメッセージを出力したいと思います。


2
len()が機能しませんか?空のデータフレームの場合は0を返します。
VIKASH JAISWAL 2013年

回答:


462

属性df.emptyを使用して、空かどうかを確認できます。

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

出典:Pandas Documentation


3
dfがpd.DataFrameであることを知る必要があるので、これは残念なことのようです。pd.DataFrameにbool()を実装しない動機を知りたいのですが。
クワント

17
@Quant-ドキュメントには、boolがデータフレームのエラーを発生させる理由についての説明があります:リンク。引用:「長さがゼロではないため、Trueである必要がありますか?Falseの値があるため、Falseです。不明確なので、代わりに、パンダはValueErrorを発生させます」
Bij

56

len関数を使用します。それよりもはるかに高速ですemptylen(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
len(df.index)== 0またはlen(df.columns)== 0のいずれかが原因で、DataFrameが空になる場合もあります。
Mark Horvath

9

長いルートを行く方が好きです。これらは、try-except句の使用を回避するために私が従うチェックです-

  1. 変数がNoneではないかどうかを確認します
  2. 次に、そのデータフレームと
  3. 空でないことを確認してください

ここにDATA、疑わしい変数があります-

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

2
これは、変数が空であるか行を持つDataFrame(OPが意味するもの)であることが予想される場合、冗長であり、悪い習慣です。DFではない場合(またはDFでない場合)、どこかで問題が発生したため、例外がスローされます。
fgblomqvist

Pythonでは、try/except安くてif高価です。PythonはJavaでもCでもありません。ここでは、許可よりも許しを求める方が簡単です
ニックマリナキス

4

このスレッドで受け入れられた空の定義は、ゼロ行のみのデータフレームであるようです。ただし、行と列がゼロの空のデータフレームと、行と列が少なくとも1つある空のデータフレームには違いがあります。いずれの場合も、インデックスの長さは0であり、次に示すようにempty = 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

ヘッダーとデータが空のデータフレーム、またはデータ空のデータフレームを区別する1つの方法は、列インデックスの長さテストすることです。最初にロードされたデータフレームはゼロ列を返し、2番目のデータフレームは空の列の数を返します。

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 has no data」メッセージを表示するだけでも意味があります。
3)なぜですか? 
DataFrameが空の場合(つまり、データがまったく含まれていない場合)。 
空ではないと見なされます)プロットしないでメッセージを出力することが望ましいです:
2つのデータフレーム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')

このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、おそらく投票数が増える可能性があります。あなたが今尋ねている人だけでなく、あなたが将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。口コミから
ダブルビープ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.