197

私の関数 f が変数で呼び出されたとき、var が pandas データフレームであるかどうかを確認したい:

def f(var):
    if var == pd.DataFrame():
        print "do stuff"

解決策は非常に単純かもしれないと思いますが、

def f(var):
    if var.values != None:
        print "do stuff"

期待どおりに動作させることができません。

4

2 に答える 2

281

を使用isinstanceします。他には何もありません:

if isinstance(x, pd.DataFrame):
    ... # do something

PEP8isinstanceは、それが型をチェックするための好ましい方法であると明示的に述べています

No:  type(x) is pd.DataFrame
No:  type(x) == pd.DataFrame
Yes: isinstance(x, pd.DataFrame)

そして、考えることさえしないでください

if obj.__class__.__name__ = 'DataFrame':
    expect_problems_some_day()

isinstance継承を処理します ( type() と isinstance() の違いは何ですか? を参照)。たとえば、変数が文字列 (strまたはunicode) であるかどうかがわかります。これらは から派生しているためbasestring)

if isinstance(obj, basestring):
    i_am_string(obj)

特にpandas DataFrameオブジェクトの場合:

import pandas as pd
isinstance(var, pd.DataFrame)
于 2013-02-11T09:23:16.907 に答える
143

組み込みisinstance()関数を使用します。

import pandas as pd

def f(var):
    if isinstance(var, pd.DataFrame):
        print("do stuff")
于 2013-02-11T09:15:10.797 に答える