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

PEP8明确表示这isinstance是检查类型的首选方法

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() 之间的区别是什么?)。例如,它会告诉您变量是否为字符串(strunicode),因为它们派生自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 回答